Преобразование JSON в XML в Java
Я новичок в json. У меня есть программа для создания xml из объекта json.
String str = "{'name':'JSON','integer':1,'double':2.0,'boolean':true,'nested':{'id':42},'array':[1,2,3]}";
JSON json = JSONSerializer.toJSON( str );
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setTypeHintsCompatibility( false );
String xml = xmlSerializer.write( json );
System.out.println(xml);
вывод:
<?xml version="1.0" encoding="UTF-8"?>
<o><array json_class="array"><e json_type="number">1</e><e json_type="number">2</e><e json_type="number">3</e></array><boolean json_type="boolean">true</boolean><double json_type="number">2.0</double><integer json_type="number">1</integer><name json_type="string">JSON</name><nested json_class="object"><id json_type="number">42</id></nested></o>
Моя самая большая проблема заключается в том, как написать мои собственные атрибуты вместо json_type = "number", а также написать мои собственные вспомогательные элементы.
Ответы
Ответ 1
Используйте (отличную) библиотеку JSON-Java от json.org, затем
JSONObject json = new JSONObject(str);
String xml = XML.toString(json);
toString
может принимать второй аргумент, чтобы указать имя корня XML node.
Эта библиотека также может конвертировать XML в JSON с помощью XML.toJSONObject(java.lang.String string)
Проверьте Javadoc
Ссылка на репозиторий github
П
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160212</version>
</dependency>
оригинальное сообщение обновлено новыми ссылками
Ответ 2
Если у вас есть действительный файл dtd для xml, вы можете легко преобразовать json в xml и xml в json, используя двоичный файл jcl eclipselink.
Обратите внимание: http://www.cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
В статье также есть пример проекта (включая поддерживающие сторонние банки) в виде zip файла, который можно загрузить для справочной цели.
Ответ 3
Если вы хотите заменить любое значение node, вы можете сделать это следующим образом:
JSONObject json = new JSONObject(str);
String xml = XML.toString(json);
xml.replace("old value", "new value");
Ответ 4
Трансформация с помощью XSLT 3.0 - это единственный правильный способ сделать это, насколько я могу судить. Гарантируется создание корректного XML и хорошая структура.
https://www.w3.org/TR/xslt/#json
Ответ 5
Библиотека Underscore-java имеет статический метод U.jsonToXml(jsonstring)
. Я поддерживаю проект. Живой пример
import com.github.underscore.lodash.U;
public class MyClass {
public static void main(String args[]) {
String json = "{\"name\":\"JSON\",\"integer\":1,\"double\":2.0,\"boolean\":true,\"nested\":{\"id\":42},\"array\":[1,2,3]}";
System.out.println(json);
String xml = U.jsonToXml(json);
System.out.println(xml);
}
}
Выход:
{"name":"JSON","integer":1,"double":2.0,"boolean":true,"nested":{"id":42},"array":[1,2,3]}
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name>JSON</name>
<integer number="true">1</integer>
<double number="true">2.0</double>
<boolean boolean="true">true</boolean>
<nested>
<id number="true">42</id>
</nested>
<array number="true">1</array>
<array number="true">2</array>
<array number="true">3</array>
</root>