61

我是 json 新手。我有一个从 json 对象生成 xml 的程序。

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" 以及编写自己的子元素,例如 .

4

6 回答 6

135

然后使用来自 json.org 的(优秀的)JSON-Java 库

JSONObject json = new JSONObject(str);
String xml = XML.toString(json);

toString可以采用第二个参数来提供 XML 根节点的名称。

该库还能够使用以下方法将 XML 转换为 JSONXML.toJSONObject(java.lang.String string)

检查Javadoc

链接到github 存储库

聚甲醛

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160212</version>
</dependency>

原始帖子更新了新链接

于 2013-11-14T12:59:58.580 回答
8

Underscore-java库有静态方法U.jsonToXml(jsonstring)活生生的例子

import com.github.underscore.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>
于 2018-01-01T10:10:55.507 回答
5

For json to xml use the following Jackson example:

final String str = "{\"name\":\"JSON\",\"integer\":1,\"double\":2.0,\"boolean\":true,\"nested\":{\"id\":42},\"array\":[1,2,3]}";
ObjectMapper jsonMapper = new ObjectMapper();
JsonNode node = jsonMapper.readValue(str, JsonNode.class);
XmlMapper xmlMapper = new XmlMapper();
                xmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
                xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
                xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_1_1, true);
ObjectWriter ow = xmlMapper.writer().withRootName("root");
StringWriter w = new StringWriter();
ow.writeValue(w, node);
System.out.println(w.toString());

Prints:

<?xml version='1.1' encoding='UTF-8'?>
<root>
  <name>JSON</name>
  <integer>1</integer>
  <double>2.0</double>
  <boolean>true</boolean>
  <nested>
    <id>42</id>
  </nested>
  <array>1</array>
  <array>2</array>
  <array>3</array>
</root>

To convert it back (xml to json) take a look at this answer https://stackoverflow.com/a/62468955/1485527 .

于 2020-08-24T12:28:32.290 回答
4

如果您有 xml 的有效 dtd 文件,那么您可以使用 eclipselink jar 二进制文件轻松地将 json 转换为 xml 和 xml 到 json。

请参考:http ://www.cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html

本文还有一个示例项目(包括支持的第三方 jars)作为 zip 文件,可以下载以供参考。

于 2015-06-10T05:20:02.690 回答
0

据我所知,使用 XSLT 3.0 进行转换是唯一正确的方法。它保证生成有效的 XML,并且是一个很好的结构。 https://www.w3.org/TR/xslt/#json

于 2017-12-08T14:37:46.813 回答
-2

如果你想替换任何节点值,你可以这样做

JSONObject json = new JSONObject(str);
String xml = XML.toString(json);
xml.replace("old value", "new value");
于 2017-07-02T11:30:30.130 回答