我想要把Xml字符串转换成JSON,但是结果并不理想,下面是我的代码
第一种:
import net.sf.json.JSON;
import net.sf.json.xml.XMLSerializer;
public class Test {
public static void main(String[] args) throws Exception {
String xml = "<root><name type='type'>zhaipuhong</name><gender>male</gender><birthday><year>1970</year><month>12</month><day>17</day></birthday></root>";
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read( xml );
System.out.println( json.toString(2) );
}
}
得到的结果是:
{
"name": "zhaipuhong",
"gender": "male",
"birthday": {
"year": "1970",
"month": "12",
"day": "17"
}
}
<name type='type'>的属性没了
第二种:
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;
public class Test {
public static void main(String[] args) throws Exception {
String xml = "<root><name type='type'>zhaipuhong</name><gender>male</gender><birthday><year>1970</year><month>12</month><day>17</day></birthday></root>";
String json = null;
JSONObject jsonObj = null;
try {
jsonObj = XML.toJSONObject(xml);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
json = jsonObj.toString(2); //有缩进
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(json);
}
}
结果是:
{"root": {
"birthday": {
"month": 12,
"year": 1970,
"day": 17
},
"name": {
"content": "zhaipuhong",
"type": "type"
},
"gender": "male"
}}
这种虽然属性也可以转换出来,但是它却成了一个节点,我想要的是属性前面加一个“@”,即“@type”:"type"
请问有什么好的办法?不一定要在后台,如果前台js也可以实现,也行,但是需要注意的是,我的Xml字符串的节点属性一般是形如xsi:type=”test“,如果用第一种会报错,有没有什么办法能满足转换属性时能在属性前面加一个@符号,又能顺利转换如xsi:type="test"这样的属性?先谢谢大家
------解决方案--------------------
XMLSerializer xmlSerializer = new XMLSerializer();
String xml = "<root><name type='type'>zhaipuhong</name><gender>male</gender><birthday><year>1970</year><month>12</month><day>17</day></birthday></root>";
xmlSerializer.setTypeHintsCompatibility(false);
xmlSerializer.setTypeHintsEnabled(false);
JSON json = xmlSerializer.read(xml);
System.out.println(json);
这样设置下吧。
------解决方案--------------------
因为你传的是XML字符串,我觉得可以在遇到xsi:type的时候做一个转换,比如转成xsi_type什么的,然后再把转出来的JSON再做一次转换xsi:type—>xsi:type,这样应该可以得到你想要的