equivalent XSLT эквивалент для JSON





12 Answers

Попробуйте JOLT . Это библиотека преобразования JSON для JSON, написанная на Java.

Он был создан специально, потому что мы не хотели играть в игру JSON -> XML -> XSLT -> XML -> JSON, а использование шаблона для любого достаточно сложного преобразования недостижимо.

json xslt equivalent

Существует ли эквивалент XSLT для JSON? Что-то, что позволяет мне делать преобразования на JSON, например XSLT, для XML.




XSLT поддерживает JSON, как показано на XSLT

XML использует угловые скобки для токенов-разделителей, JSON использует скобки, квадратные скобки, ... I. e. Меньшее количество сопоставлений распознавания токенов в XML означает, что оно оптимизировано для декларативного преобразования, тогда как большее количество сравнений, как оператор switch, по соображениям скорости предполагают предположение о спекулятивном ветвлении, которое полезно для императивного кода на языках сценариев. Как непосредственное следствие, для разных сочетаний полуструктурированных данных вы можете сравнить производительность XSLT и javascript-движков как часть чувствительных страниц. Для незначительной полезной нагрузки данных преобразования могут работать с JSON без XML-сериализации. Решение W3 должно основываться на лучшем анализе.







Говорить, что недостаток инструментов предполагает отсутствие необходимости, это просто вопрос вопроса. То же самое можно было бы применить для поддержки X или Y в Linux (зачем беспокоиться о разработке качественных драйверов и / или игр для такой ОС меньшинства? И зачем обращать внимание на ОС, для которых не разрабатываются крупные игровые и аппаратные компании?). Вероятно, люди, которым нужно будет использовать XSLT и JSON, в конечном итоге используют несколько тривиальный обходной путь: преобразование JSON в XML. Но это не оптимальное решение, не так ли?

Когда у вас есть родной формат JSON и вы хотите отредактировать его «wysywyg» в браузере, XSLT будет более чем адекватным решением проблемы. Выполнение этого с помощью обычного javascript-программирования может стать болью в заднице.

Фактически, я применил подход XSLT «каменный возраст», используя синтаксический анализ подстроки, чтобы интерпретировать некоторые базовые команды для javascript, например, вызвать шаблон, обработать дочерние элементы и т. Д. Конечно, реализация механизма преобразования с объектом JSON намного проще, чем реализуя полноценный XML-синтаксический анализатор для анализа XSLT. Проблема в том, что для использования шаблонов XML для преобразования объекта JSON необходимо проанализировать XML шаблонов.

Чтобы преобразовать объект JSON с XML (или HTML, или текст или что-то еще), вам нужно тщательно подумать о синтаксисе и о том, какие специальные символы вам нужно использовать для идентификации команд преобразования. В противном случае вам придется разработать парсер для собственного пользовательского языка шаблонов. Пройдя этот путь, я могу сказать, что это некрасиво.

Обновление (12 ноября 2010 г.): после нескольких недель работы над моим парсером я смог оптимизировать его. Шаблоны анализируются заранее, а команды хранятся как объекты JSON. Правила преобразования также являются объектами JSON, а код шаблона - это сочетание HTML и синтаксиса homebrew, аналогичного коду оболочки. Я смог преобразовать сложный документ JSON в HTML, чтобы сделать редактор документов. Код составляет около 1 тыс. Строк для редактора (это для частного проекта, поэтому я не могу его разделить) и около 990 строк для кода преобразования JSON (включает в себя команды итерации, простые сравнения, вызов шаблонов, сохранение переменных и оценку). Я планирую выпустить его под лицензией MIT. Бросьте мне письмо, если вы хотите принять участие.




Еще один новый ответ на старый вопрос, я бы предложил посмотреть на DefiantJS . Это не эквивалент XSLT для JSON, это XSLT для JSON. Раздел «Templating» документации включает в себя этот пример:

<!-- Defiant template -->
<script type="defiant/xsl-template">
    <xsl:template name="books_template">
        <xsl:for-each select="//movie">
            <xsl:value-of select="title"/><br/>
        </xsl:for-each>
    </xsl:template>
</script>

<script type="text/javascript">

var data = {
        "movie": [
            {"title": "The Usual Suspects"},
            {"title": "Pulp Fiction"},
            {"title": "Independence Day"}
        ]
    },
    htm = Defiant.render('books_template', data);

console.log(htm);
// The Usual Suspects<br>
// Pulp Fiction<br>
// Independence Day<br>



Я действительно устал от огромного количества шаблонов JavaScript, там, и всех их встроенных HTML-шаблонов, разных стилей разметки и т. Д., И решил Stapling которая позволяет форматировать XSLT для структур данных JSON. Не наука о ракетах - это просто JSON, анализируемый XML, а затем отформатированный с помощью документа XSLT. Это тоже быстро, не так быстро, как JavaScript-шаблоны в Chrome, но в большинстве других браузеров он, по крайней мере, так же быстро, как альтернатива JS-движка для больших структур данных.




Я использую маршрут Camel umarshal (xmljson) -> to (xlst) -> marshal (xmljson). Достаточно эффективный (хотя и не 100% идеальный), но простой, если вы уже используете Camel.




очень удобно конвертировать JSON с помощью XSLT: вам нужен десериализатор JSON2SAX и сериализатор SAX2JSON.

Пример кода в Java: http://www.gerixsoft.com/blog/json/xslt4json




Почему бы вам не преобразовать JSON в XML с помощью Mr. Data Coverter , преобразовать его с помощью XSLT и затем сменить его обратно на JSON, используя то же самое.




Я написал адаптер dom для моей json-обработки, основанной на jsonson, давным-давно. Он использует библиотеку nu.xom. Полученное дерево dom работает с возможностями java xpath и xslt. Я сделал некоторые варианты реализации, которые довольно просты. Например, корневой узел всегда называется «root», массивы переходят в узел ol с подчиненными элементами li (например, в html), а все остальное является только узлом с примитивным значением или другим узлом объекта.

JsonXmlConverter.java

Использование: JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root"); JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");




Возможно использование XSLT с JSON. Verson 3 из XPath (3.1) XSLT (3.0) и XQuery (3.1) каким-то образом поддерживает JSON. Это, похоже, доступно в коммерческой версии Saxon, и в какой-то момент может быть включено в версию HE. https://www.saxonica.com/html/documentation/functions/fn/parse-json.html

-

Что я ожидаю от альтернативного решения:

Я хотел бы иметь возможность ввода JSON для получения соответствующего набора данных и вывода JSON или TEXT.

Доступ к произвольным свойствам и оценка значений

Поддержка условной логики

Я бы хотел, чтобы скрипты преобразования были внешними из инструмента, на основе текста и, предпочтительно, для широко используемого языка.

Возможная альтернатива?

Интересно, может ли SQL быть подходящей альтернативой. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server

Было бы неплохо, если бы альтернативный инструмент мог обрабатывать JSON и XML https://docs.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server

Я еще не пытался преобразовать скрипты XSLT, которые я использую в SQL, или полностью оценил этот вариант, но я надеюсь посмотреть на него в ближайшее время. Только некоторые мысли до сих пор.




JSLT очень близок к эквиваленту JSON XSLT. Это язык преобразования, где вы записываете фиксированную часть вывода в синтаксисе JSON, а затем вставляете выражения для вычисления значений, которые вы хотите вставить в шаблон.

Пример:

{
  "time": round(parse-time(.published, "yyyy-MM-dd'T'HH:mm:ssX") * 1000),
  "device_manufacturer": .device.manufacturer,
  "device_model": .device.model,
  "language": .device.acceptLanguage
}

Он реализован на Java поверх Jackson.






Related