当前位置: 代码迷 >> Java Web开发 >> java xml转换成JSON有关问题
  详细解决方案

java xml转换成JSON有关问题

热度:850   发布时间:2016-04-10 22:44:06.0
java xml转换成JSON问题
我想要把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,这样应该可以得到你想要的
  相关解决方案