【发布时间】:2013-05-10 13:57:46
【问题描述】:
我不熟悉在 Java 中使用 json-simple 库,并且我已经通过了 encoding 和 decoding 示例。复制编码示例很好,但我无法让解码示例与混合类型 JSON 一起使用。
我的一个问题是库中有太多类没有正确记录,并且我没有源代码(以便能够通读并理解它们的目的)。因此,我很难理解如何使用这些类。
看完这个例子:
String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
JSONParser parser = new JSONParser();
ContainerFactory containerFactory = new ContainerFactory(){
public List creatArrayContainer() {
return new LinkedList();
}
public Map createObjectContainer() {
return new LinkedHashMap();
}
};
try {
Map json = (Map)parser.parse(jsonText, containerFactory);
Iterator iter = json.entrySet().iterator();
System.out.println("==iterate result==");
while(iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
System.out.println(entry.getKey() + "=>" + entry.getValue());
}
System.out.println("==toJSONString()==");
System.out.println(JSONValue.toJSONString(json));
} catch(ParseException pe) {
System.out.println(pe);
}
从json-simple official decoding tutorial,我尝试解码这个JSON:
{
"stat":{
"sdr": "MAC address of FLYPORT",
"rcv": "ff:ff:ff:ff:ff:ff",
"time": "0000000000000",
"type": 0,
"subt": 0,
"argv": [
{"type": "6","val": "NetbiosName"},
{"type": "6","val": "MACaddrFlyport"},
{"type": "6","val": "FlyportModel"},
{"type": "1","val": id}
]
}
}
我正在编写以下代码进行解码:
String jsonString = "{\"stat\":{\"sdr\": \"aa:bb:cc:dd:ee:ff\",\"rcv\": \"aa:bb:cc:dd:ee:ff\",\"time\": \"UTC in millis\",\"type\": 1,\"subt\": 1,\"argv\": [{1,2},{2,3}]}}";
JSONObject jsonObject = new JSONObject(jsonString);
JSONObject newJSON = jsonObject.getJSONObject("stat");
System.out.println(newJSON);
但它不起作用。事实上,我也无法让未经修改的示例正常工作,并且原作者没有解释他们的代码。
如图所示解码此 JSON 的最简单方法是什么?
【问题讨论】:
-
我们可以看看你的解码数据的代码吗?
-
您是否检查过JSON official decoding tutorial 中的示例 5(可停止的 SAX 类内容处理程序)我可以看到该代码适用于单个字典(地图)/数组。但是您正在尝试使用地图中的地图(多个地图)的 json。如果我错了,请纠正我。
-
@ram2013:是的……我需要解码的是地图中的地图……我想这就是其中之一。好像我得到了“stat”的值,我可以用它来进一步解码 JSON。
-
问我最简单的方法是什么?这个>>code.google.com/p/google-gson
-
首先你的
jsonString不是一个有效的json。argv里面的那个东西是什么??
标签: java json json-simple