Существуют ли доступные JAR-ы для преобразования из JSON в XML?Java-реализация преобразования JSON в XML
ответ
Не Java, но чистая реализация XSLT 2.0:
Посмотрите на f:json-document()
от FXSL 2.x library.
Используя эту функцию, очень легко включить JSon и использовать ее так же, как ... XML.
Например, можно просто написать следующее выражение XPath:
f:json-document($vstrParam)/Students/*[sex = 'Female']
и получить все дети Students
с sex = 'Female'
Вот полный пример:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://fxsl.sf.net/"
exclude-result-prefixes="f xs"
>
<xsl:import href="../f/func-json-document.xsl"/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vstrParam" as="xs:string">
{
"teacher":{
"name":
"Mr Borat",
"age":
"35",
"Nationality":
"Kazakhstan"
},
"Class":{
"Semester":
"Summer",
"Room":
null,
"Subject":
"Politics",
"Notes":
"We're happy, you happy?"
},
"Students":
{
"Smith":
{"First Name":"Mary","sex":"Female"},
"Brown":
{"First Name":"John","sex":"Male"},
"Jackson":
{"First Name":"Jackie","sex":"Female"}
}
,
"Grades":
{
"Test":
[
{"grade":"A","points":68,"grade":"B","points":25,"grade":"C","points":15},
{"grade":"C","points":2, "grade":"B","points":29, "grade":"A","points":55},
{"grade":"C","points":2, "grade":"A","points":72, "grade":"A","points":65}
]
}
}
</xsl:variable>
<xsl:template match="/">
<xsl:sequence select=
"f:json-document($vstrParam)/Students/*[sex = 'Female']"/>
</xsl:template>
</xsl:stylesheet>
Когда выше преобразование применяется на любом документе XML (игнорируется), правильный результат получается:
<Smith>
<First_Name>Mary</First_Name>
<sex>Female</sex>
</Smith>
<Jackson>
<First_Name>Jackie</First_Name>
<sex>Female</sex>
</Jackson>
Возможно, вы захотите попробовать XStream. Взгляните на http://x-stream.github.io/faq.html#JSON.
Вы можете использовать json-lib, он обеспечивает двунаправленное преобразование.
Еще одна возможность: отстрелить, http://jettison.codehaus.org может подвергнуть JSon через интерфейс XML-синтаксического анализа (StAX XMLStreamReader), который позволяет интеграция с системами, которые понимают только XML. Это требует использования конвенции (барсук, или что-то другое, что было вызвано).
XStream, например, использует приложение Jettison (или, по крайней мере, соглашение с Барсукой), чтобы разрешить использование JSON.
Но сам вопрос немного расплывчатый: хотя вы всегда можете конвертировать из одного в другое (это очень тривиально, что нужно делать на самом деле), XML и JSON не эквивалентны: нет взаимно однозначного без потерь общее отображение. Следовательно, возникает вопрос: что вы планируете делать с результатами, как будет использоваться xml?
http://json-lib.sourceforge.net/
- точки выше примерно не полностью Foolproof один-однозначное отображение правильны, но у меня был хороший опыт работы с преобразования XML в JSON, используя вышеупомянутую библиотеку.
Вы можете создать JSONObject, а затем преобразовать его в XML с помощью XML class в орг.JSON имен
Обертывание строку JSON в объект так же легко, как передать его в конструктор
JSONObject o = new JSONObject(jsonString);
Тогда вы можете получить его в формате XML с помощью класса XML, например, так:
String xml = org.json.XML.toString(o);
Это удивительно просто, спасибо! – Jon
Можете ли вы уточнить? Я имею в виду, что я должен использовать внешние банки? Eclipse не распознает эти команды. –
Вы можете попробовать следующее: http://mvnrepository.com/artifact/org.codeartisans/org.json/20130603 –
Вы можете попробовать https://github.com/lukas-krecan/json2xml, который обеспечивает простое преобразование JSON в XML. Для анализа событий SAX используется анализатор Jackson JSON и использует его.
StAXON может преобразовать JSON в XML с использованием либо XSLT с шаблонами или StAX API событий https://github.com/beckchr/staxon/wiki/Converting-JSON-to-XML
Вот простой пример:
входного файла:
{
"container":[
{
"someString":"xxxxx",
"someInteger":123,
"someArrayElem":[
{
"key":1111,
"value":"One"
},
{
"key":2222,
"value":"Two"
}
]
}
]
}
Импорт + код:
import de.odysseus.staxon.json.JsonXMLConfig;
import de.odysseus.staxon.json.JsonXMLConfigBuilder;
import de.odysseus.staxon.json.JsonXMLInputFactory;
import de.odysseus.staxon.xml.util.PrettyXMLEventWriter;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import java.io.StringWriter;
StringWriter stringWriter = new StringWriter();
JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).prettyPrint(false).build();
XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(getClass().getClassLoader().getResourceAsStream("input.json"));
XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(stringWriter);
writer = new PrettyXMLEventWriter(writer);
writer.add(reader);
String xml = stringWriter.getBuffer().toString();
OUTPUT :
<?xml version="1.0" encoding="UTF-8"?>
<container>
<someString>xxxxx</someString>
<someInteger>123</someInteger>
<someArrayElem>
<key>1111</key>
<value>One</value>
</someArrayElem>
<someArrayElem>
<key>2222</key>
<value>Two</value>
</someArrayElem>
</container>
Я использую JSON, что Dimitre наклеил в своем ответе и преобразуется в XML. Давайте посмотрим, если он работает для вас .....
import org.json.me.JSONObject;
import cjm.component.cb.xml.ToXML;
public class Test
{
public static void main(String[] args)
{
try
{
JSONObject objectJSON = new JSONObject();
objectJSON.put("ROOT", (new JSONObject("{\"teacher\":{\"name\":\"Mr Borat\",\"age\":\"35\",\"Nationality\":\"Kazakhstan\"},\"Class\":{\"Semester\":\"Summer\",\"Room\":null,\"Subject\":\"Politics\",\"Notes\":\"We're happy, you happy?\"},\"Students\":{\"Smith\":{\"FirstName\":\"Mary\",\"sex\":\"Female\"},\"Brown\":{\"FirstName\":\"John\",\"sex\":\"Male\"},\"Jackson\":{\"FirstName\":\"Jackie\",\"sex\":\"Female\"}},\"Grades\":{\"Test\":[{\"grade\":\"A\",\"points\":68,\"grade\":\"B\",\"points\":25,\"grade\":\"C\",\"points\":15},{\"grade\":\"C\",\"points\":2,\"grade\":\"B\",\"points\":29,\"grade\":\"A\",\"points\":55},{\"grade\":\"C\",\"points\":2,\"grade\":\"A\",\"points\":72,\"grade\":\"A\",\"points\":65}]}}")));
System.out.println("JSON: " + objectJSON);
StringBuilder xml = new ToXML().convertToXML(objectJSON, true); // Conversion Box!!!!
System.out.println("XML: " + xml);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Выход:
JSON: {"ROOT":{"Students":{"Brown":{"FirstName":"John","sex":"Male"},"Jackson":{"FirstName":"Jackie","sex":"Female"},"Smith":{"FirstName":"Mary","sex":"Female"}},"Class":{"Subject":"Politics","Room":null,"Semester":"Summer","Notes":"We're happy, you happy?"},"Grades":{"Test":[{"points":15,"grade":"C"},{"points":55,"grade":"A"},{"points":65,"grade":"A"}]},"teacher":{"age":"35","name":"Mr Borat","Nationality":"Kazakhstan"}}}
-------- JSON Detected --------
-------- XML created Successfully --------
XML: <ROOT><Students><Brown><FirstName>John</FirstName><sex>Male</sex></Brown><Jackson><FirstName>Jackie</FirstName><sex>Female</sex></Jackson><Smith><FirstName>Mary</FirstName><sex>Female</sex></Smith></Students><Class><Subject>Politics</Subject><Room>null</Room><Semester>Summer</Semester><Notes>We're happy, you happy?</Notes></Class><Grades><Test><LIST_ELEMENT_Test><points>15</points><grade>C</grade></LIST_ELEMENT_Test><LIST_ELEMENT_Test><points>55</points><grade>A</grade></LIST_ELEMENT_Test><LIST_ELEMENT_Test><points>65</points><grade>A</grade></LIST_ELEMENT_Test></Test></Grades><teacher><age>35</age><name>Mr Borat</name><Nationality>Kazakhstan</Nationality></teacher></ROOT>
- 1. Правила преобразования XML-JSON
- 2. Упрощение преобразования xml в json
- 3. Изменение преобразования JSON в XML в NeoLoad
- 4. Использование JavaScriptSerializer для преобразования Json в Xml
- 5. Staxon - проблемы с XML в JSON преобразования
- 6. angular2 transformRequest для преобразования xml в json
- 7. преобразования XML не в JSON возвращают объект
- 8. Неизвестная ошибка преобразования XML в JSON
- 9. Groovy скрипт для преобразования xml в json
- 10. XML в JSON преобразования правильный формат
- 11. Чтение узлов XML после преобразования XML в JSON в Java
- 12. Node.js Пример преобразования Xml в JSON для большого файла Xml
- 13. XML-преобразования в JSON [oracle.xdb.XMLType к JSON объект] проблемы производительности
- 14. Анализ данных Json в C# для преобразования в xml
- 15. преобразования JSON в XML и сохранить результат в файл
- 16. Элемент корня отсутствует после преобразования JSON в XML в Apigee
- 17. Преобразование JSON в XML
- 18. JSON преобразования
- 19. преобразования JSON в массив
- 20. преобразования JSON в массив
- 21. Преобразование XML в JSON
- 22. Доступ объекта JSON в vb.net после преобразования из XML
- 23. Преобразование xml в json без преобразования String/Integer?
- 24. Существуют ли строгие правила преобразования JSON в XML и обратно?
- 25. После преобразования xml в json невозможно получить доступ к данным
- 26. Динамическая поддержка JAXB для преобразования XML в JSON
- 27. Инвертированный порядок элементов JSON в Java после преобразования XML
- 28. Инструмент (javascript) для преобразования XML-строки в JSON
- 29. Использование BizTalk для преобразования XML в формат JSON
- 30. Проблемы с булевым во время преобразования Xml в Json
Выглядит здорово. Но я попытался, и f: json-document() всегда возвращает пустой документ. Я разместил об этом на форуме SF.net: https://sourceforge.net/forum/message.php?msg_id=7385342 – avernet
Есть пример того, как использовать эту функцию. Это файл testFunc-json-document.xsl в папке «Тесты»: http://fxsl.cvs.sourceforge.net/viewvc/fxsl/fxsl-xslt2/Tests/testFunc-json-document.xsl?revision= 1.1 & view = markup При применении к любому XML-файлу (не используется) это преобразование дает правильный результат. Одним из потенциальных факторов, которые могут вызвать вашу проблему, является использование относительно старой версии саксонской версии - пожалуйста, используйте версию Saxon 9.x. Кроме того, ссылка в вашем сообщении недоступна. –