日期:2014-05-17  浏览次数:20760 次

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='ty