我正在使用org.json
库,如下所示,从XML转换为JSON
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160212</version> </dependency>
一个简单的测试用例显示了我遇到的问题,请参阅以下内容: -
我有以下XML
<record>
<name>A108B</name>
</record>
反过来产生
{"record": { "id": "A108B" }}
大!如果id
1111
使用以下代码
XML.toJSONObject(xml...)
我得到了
{"record": { "name": 1111 }}
我实际上更喜欢将值保留为所有字符串,即用户标识符。我不希望输出发生变化,具体取决于标识符是否恰好没有字符。
有什么方法可以强迫org.json这样做吗?我可以分叉代码并为自己做一个更改,但我希望这是其他人遇到的问题并且有解决方案。
答案 0 :(得分:1)
这似乎可以解决问题,我不得不覆盖JSONTokener的nextValue
。
String xml = "<test>111</test>";
JSONObject json = XML.toJSONObject(xml);
JSONTokener tokener = new JSONTokener(json.toString()) {
public Object nextValue() throws JSONException {
Object nextValue = super.nextValue();
if (nextValue instanceof Number) {
Number value = (Number) nextValue;
return value.toString();
}
return nextValue;
}
};
json = new JSONObject(tokener);
System.out.println(json.toString());
输出:{"test":"111"}
答案 1 :(得分:0)
XML.toJSONObject(...)
在内部调用static Object stringToValue(String string)
,总是尝试将值转换为Boolean
,JSONObject.Null
,Long
和{ {1}}首先,仅在所有转化尝试都失败时返回Double
。似乎没有(简单)的方法。
您可以在阅读时简单地转换值:
,而不是分叉或做一些反射魔术String