JSON官方的Java API:一个JSONObjects的JSONArray

问题描述:

达累斯萨拉姆,JSON官方的Java API:一个JSONObjects的JSONArray

使用json.org API,我们可以轻松地将地图以一个JSON对象:

Map<String, String> carta = new Map<String, String>(); 
    carta.put("id", "123"); 
    carta.put("Planet", "Earth"); 
    carta.put("Status", "getting dirty"); 
    JSONObject json = new JSONObject(); 
    for(Iterator<String> it=input.keySet().iterator(); it.hasNext();){ 
    String key = it.next(); 
    json.put(key, input.get(key)); 
    } 
    System.out.println(json.toString()); 
// output:   {id:"123", Planet:"Earth", Status: "getting dirty"} 

现在,我们希望有这些数组对象 这个API不提供这个吗?而在API中他们提到

JSONArray joArr = new JSONArray(); 
    joArr.put(cartaEarth); 
    joArr.put(cartaMars); 
    System.out.println(joArr.toString()); 

//output:  [{ id:123, Planet:Earth, Status: getting dirty }, {id: 456, Planet:Mars, Status: maybe aliens there }] 

没有括号...:

put(java.util.Map value) 
      Put a value in the JSONArray, where the value will be a JSONObject which is produced from a Map. 

,而不是做这件事的byhand,首选

至少,添加一个JSONObjects到JSONArray移除支架先讨论一下,谢谢!

+2

您是否尝试http://code.google.com/p/google-gson/?它是专门从Obj到JSon和Json到Obj – rsilva4 2010-09-06 14:49:51

+0

究竟是什么问题?你问如何把你的对象放在一个数组中,但继续显示你知道如何去做。 – RoToRa 2010-09-06 15:00:03

+0

我不明白为什么JSONArray的转换与JSONObject转换不一致。在JSONArray中,括号被删除! – 2010-09-06 15:25:12

你试试GSon?它专门针对JSon和Java对象的Java对象。

+0

gson很好地完成了这项工作,谢谢@rsilva!不过,我不知道json.org的api是否可以吗? – 2010-09-06 16:30:15

我会建议看看别的东西比org.json包。几乎所有来自org.json列表的替代方案都提供了使用JSON更方便和更简单的方法。 除了有些人喜欢的Gson,我会推荐Jackson;而flex-json和Svenson是另外一些看起来很体面的软件包。

如果你坚持使用org.json来做这件事,你需要更多地解释你的问题 - API有你需要的所有方法,它们允许你添加所有类型的值(JSON数组,对象,字符串,数字,布尔值和空值)。但是你的类型需要匹配JSON类型,所以没有从数组到对象的转换。

+0

OK 4 http://jackson.codehaus.org/ 至于json.org,我没有附件...尚未... @API,JSONArray以不同的方式从地图生成JSONObjects(无括号)比从地图手动创建JSONObject。 – 2010-09-07 10:15:34

+0

好(关于创建地图),还没有广泛使用它。太糟糕,如果它是不对称的。但请注意,括号不是对象模型的一部分,而是序列化的一部分......我想你所说的是它添加了Map或List的所有元素,而不是Map或List本身。在Java中,通常是由于List.add()和List.addAll()(或Map.put(),Map.putAll())之间的区别。 – StaxMan 2010-09-07 16:33:42