2013-11-14 123 views
33

我是json的新手。我有一个程序从json对象生成xml。在Java中将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 =“号”,也写我自己的子元素,比如我自己的属性。

+0

维诺德,你有没有对上述问题的解决,“编写自己的属性从JSON生成的XML标签”?我也在寻找解决方案,如果你发现,请在这个帖子中发布。提前致谢。 – Malleswari

回答

71

从json.org使用(优秀)JSON-Java库然后

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

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

该库还能够使用XML.toJSONObject(java.lang.String string)

检查Javadoc

链接到the github repository

POM

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

原帖更新,以XML转换成JSON新链接

+1

非常感谢。如何写json对象添加attrubute元素像 vinod

+0

我想唯一的方法是将JSON反序列化为(自定义)Java对象。然后,使用像XMLBeans或XStream这样的框架,并在注释的帮助下指定哪个属性作为元素,哪个属性作为属性 –

+0

或者,使用上面简单的两行中的XML并将XSLT应用到它 –

0

如果你想更换任何节点值,你可以像这样

JSONObject json = new JSONObject(str); 
String xml = XML.toString(json); 
xml.replace("old value", "new value"); 
0

用XSLT 3.0转化为做到这一点,据我可以告诉的唯一正确方法。它保证能够生成有效的XML,并且具有良好的结构。 https://www.w3.org/TR/xslt/#json

0

存在underscore-lodash库,其静态方法fromJson和toXml。

代码示例:

import com.github.underscore.lodash.$; 
import java.util.Map; 
import org.junit.Test; 
import static org.junit.Assert.assertEquals; 

public class StringTest { 

    @SuppressWarnings("unchecked") 
    @Test 
    public void toXmlFromJson() { 
     final String json = "{\n" 
      + " \"root\": {\n" 
      + " \"FirstItem\": \"1\",\n" 
      + " \"SecondItem\": \"2\"\n" 
      + " }\n" 
      + "}"; 
     assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n" 
      + " <FirstItem>1</FirstItem>\n <SecondItem>2</SecondItem>\n</root>", 
      $.toXml((Map<String, Object>) $.fromJson(json))); 
    } 
}