Есть ли XSLT- эквивалент для JSON? Что-то, что позволяет мне делать преобразования в JSON, как XSLT в XML.
json
xslt
equivalent
language-comparisons
luvieere
источник
источник
Ответы:
Интересная идея. Некоторые поиски в Google дали несколько интересных страниц, в том числе:
Надеюсь это поможет.
источник
XSLT-эквиваленты для JSON - список кандидатов (инструменты и спецификации)
инструменты
Вы можете использовать XSLT для JSON с целью fn: json-to-xml .
Технические характеристики:
источник
Попробуйте ДЖОЛТ . Это библиотека преобразования JSON в JSON, написанная на Java.
Он был создан именно потому, что мы не хотели играть в игру «JSON -> XML -> XSLT -> XML -> JSON», и использование шаблона для любого достаточно сложного преобразования невозможно.
источник
jq - легкий и гибкий JSON-процессор командной строки
Он не основан на шаблонах, как XSLT, но более лаконичен. например, для извлечения
name
иaddress
полей в массив:[.name, .address]
В этом руководстве рассматривается пример преобразования JSON API в Twitter (и в руководстве много примеров).
источник
.. | .attr_name?
то, что ты ищешь? (из stedolan.github.io/jq/manual/#RecursiveDescent: .. )XSLT поддерживает JSON, как показано на http://www.w3.org/TR/xslt-30/#json
XML использует угловые скобки для маркеров-разделителей, JSON использует скобки, квадратные скобки, ... I. e. Меньшее число сравнений распознавания токенов в XML означает, что он оптимизирован для декларативного преобразования, в то время как большее количество сравнений, подобно выражению switch, по соображениям скорости предполагают спекулятивный прогноз ветвления, для которого полезен императивный код в языках сценариев. Как прямое следствие, для различных наборов полуструктурированных данных вы можете захотеть сравнить производительность XSLT и движков javascript как части отзывчивых страниц. Для незначительной полезной нагрузки данных преобразования могут работать так же хорошо с JSON без XML-сериализации. Решение W3 должно основываться на лучшем анализе.
источник
Недавно я нашел инструмент, который мне нравится для стилизации JSON: https://github.com/twigkit/tempo . Очень простой в использовании инструмент - по моему мнению, с ним гораздо проще работать, чем с XSLT - нет необходимости в запросах XPATH.
источник
Посмотрите на jsonpath-object-transform
источник
Сказать, что нехватка инструментов говорит о том, что в этом нет нужды, - это просто вопрос. То же самое можно применить к поддержке 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 и синтаксиса доморощенного, похожего на код оболочки. Мне удалось преобразовать сложный документ JSON в HTML, чтобы создать редактор документов. Код составляет около 1K строк для редактора (это для частного проекта, поэтому я не могу поделиться им) и около 990 строк для кода преобразования JSON (включает команды итерации, простые сравнения, вызов шаблона, сохранение и оценку переменных). Я планирую выпустить его под лицензией MIT. Напишите мне письмо, если хотите принять участие.
источник
Недавно я написал свою собственную маленькую библиотеку, которая старается держаться как можно ближе к
5.1 Модель обработки (XSLT REC) https://www.w3.org/TR/xslt#section-Processing-Model
как это возможно (как я мог в любом случае), в несколько строк кода JavaScript.
Вот несколько не совсем тривиальных примеров использования ...
1. Разметка JSON-to-some:
Скрипка: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(вдохновлено примером документа D.1 (XSLT REC) https://www.w3.org/TR/xslt#section-Document-Example )
где это:
... дает:
а также
2. JSON-to-JSON:
Скрипка: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
где это:
... дает:
3. XSLT против JavaScript:
JavaScript-эквивалент ...
XSLT 3.0 REC Раздел 14.4 Пример: группировка узлов на основе общих значений
(по адресу: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
Ср https://www.w3.org/TR/xslt-30/#grouping-examples
где...
... дает:
4. JSONiq против JavaScript:
JavaScript-эквивалент ...
Примеры использования JSONiq 1.1.2. Группировка запросов для JSON
(по адресу: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Ср http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
где...
... дает:
Также полезно преодолеть ограничения JSONPath в отношении. запрос к оси предка, как это поднимается этим SO вопросом (и, конечно, другими).
Например, как получить скидку на продуктовый продукт, зная его идентификатор бренда, в
?
Возможное решение:
... который дает:
«НТН,
источник
Есть сейчас! Я недавно создал библиотеку, json-transforms , именно для этой цели:
https://github.com/ColinEberhardt/json-transforms
Он использует комбинацию JSPath , DSL, смоделированного на XPath, и рекурсивный подход сопоставления с образцом, вдохновленный непосредственно XSLT.
Вот быстрый пример. Учитывая следующий объект JSON:
Вот преобразование:
Какой вывод следующий:
Это преобразование состоит из трех правил. Первый соответствует любому автомобилю, который сделан Honda, испускает объект со
Honda
свойством, затем рекурсивно сопоставляется. Второе правило соответствует любому объекту сmaker
собственности, выдачи сигналаmodel
иyear
свойства. Финальным является преобразование идентичности, которое рекурсивно совпадает.источник
В качестве еще одного нового ответа на старый вопрос, я бы предложил взглянуть на DefiantJS . Это не XSLT эквивалент для JSON, то есть XSLT для JSON. Раздел «Шаблонирование» документации включает в себя этот пример:
источник
Я очень устал от огромного количества шаблонизаторов JavaScript и всех их встроенных HTML-шаблонов, различных стилей разметки и т. Д. И решил создать небольшую библиотеку, которая позволяет форматировать XSLT для структур данных JSON. В любом случае это не ракетостроение - это просто JSON, анализируемый в XML, а затем форматированный с помощью документа XSLT. Это также быстро, не так быстро, как механизмы шаблонов JavaScript в Chrome, но в большинстве других браузеров это по крайней мере так же быстро, как альтернатива движку JS для больших структур данных.
источник
Я использую верблюжий маршрут umarshal (xmljson) -> to (xlst) -> marshal (xmljson). Достаточно эффективно (хотя и не на 100% идеально), но просто, если вы уже используете Camel.
источник
JSONiq - это такой стандарт, а Zorba - реализация C ++ с открытым исходным кодом. JSONiq также можно рассматривать как XQuery с добавлением JSON как собственного типа данных.
источник
Очень возможно конвертировать JSON с помощью XSLT: вам нужен десериализатор JSON2SAX и сериализатор SAX2JSON.
Пример кода на Java: http://www.gerixsoft.com/blog/json/xslt4json
источник
Yate ( https://github.com/pasaran/yate ) специально разработан после XSLT, содержит JPath (естественный эквивалент XPath для JS), компилируется в JavaScript и имеет довольно многолетнюю историю использования. Это практически недокументировано, но чтения образцов и тестов должно быть достаточно.
источник
JSLT очень похож на JSON-эквивалент XSLT. Это язык преобразования, в котором вы записываете фиксированную часть вывода в синтаксисе JSON, а затем вставляете выражения для вычисления значений, которые вы хотите вставить в шаблон.
Пример:
Это реализовано в Java поверх Джексона.
источник
Не слишком уверен, что в этом есть необходимость, и для меня отсутствие инструментов говорит о том, что в этом нет необходимости. JSON лучше всего обрабатывать как объекты (как это делается в JS в любом случае), и вы обычно используете язык самих объектов для выполнения преобразований (Java для объектов Java, созданных из JSON, то же самое для Perl, Python, Perl, c #, PHP и т. Д. на). Просто с обычными заданиями (или set, get), зацикливанием и тд.
Я имею в виду, что XSLT - это просто еще один язык, и одна из причин, по которой он необходим, заключается в том, что XML не является нотацией объектов, и, следовательно, объекты языков программирования не точно соответствуют друг другу (полное сопротивление между иерархической xml-моделью и объектами / структурами).
источник
name
иaddress
, и поместить их в массив:[.name, .address]
Почему бы вам не преобразовать JSON в XML с помощью Mr. Data Coverter , преобразовать его с помощью XSLT и затем изменить его обратно на JSON, используя то же самое.
источник
Рабочий дудл / доказательство концепции подхода к использованию чистого JavaScript вместе со знакомым и декларативным шаблоном, лежащим в основе соответствующих выражений XSLT и рекурсивных шаблонов, см. По адресу https://gist.github.com/brettz9/0e661b3093764f496e36.
(Аналогичный подход может быть использован для JSON.)
Обратите внимание, что демонстрационная версия также использует закрытие выражений JavaScript 1.8 для удобства выражения шаблонов в Firefox (по крайней мере до тех пор, пока не будет реализована краткая форма ES6 для методов).
Отказ от ответственности: это мой собственный код.
источник
Я давно написал dom-адаптер для моей платформы обработки json. Он использует библиотеку nu.xom. Результирующее дерево dom работает с java xpath и xslt. Я сделал несколько вариантов реализации, которые довольно просты. Например, корневой узел всегда называется «корнем», массивы переходят в узел ol с вложенными элементами li (как в html), а все остальное - просто подчиненный узел с примитивным значением или другой объектный узел.
JsonXmlConverter.java
Применение:
JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
источник
Один из подходов, который еще не дан, заключается в использовании генератора синтаксических анализаторов для создания синтаксического анализатора в XSLT, который анализирует JSON и создает вывод XML.
Одним из вариантов, который часто упоминается на конференциях XML, является генератор синтаксических анализаторов ReX ( http://www.bottlecaps.de/rex/ ) - хотя на сайте он полностью недокументирован, рецепты доступны при поиске.
источник
Может быть возможно использовать XSLT с JSON. Версон 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, или еще не полностью оценил эту опцию, но я надеюсь рассмотреть ее в ближайшее время. Просто некоторые мысли до сих пор.
источник