2013-01-21 55 views
1

我有代码看起来是这样的:不希望的输出,似乎是一个数组

import net.sf.json.*;--just so you know what the library is 
... 
JSONArray a = new JSONArray(); 
JSONObject p = new JSONObject(); 
p.put("some_attribute1","some normal string"); 
p.put("some_attribute2","[3something]"); 
p.put("some_attribute3","[something3]"); 
a.add(p); 
System.out.println(a.toString()); 

这产生:

[ 
    { 
     "some_attribute1":"some normal string", 
     "some_attribute2":["3something"], 
     "some_attribute3":"[something3]" 
    } 
] 

而不是所希望的结果:

[ 
    { 
     "some_attribute1":"some normal string", 
     "some_attribute2":"[3something]", 
     "some_attribute3":"[something3]" 
    } 
] 

注意“some_attribute2”是实际输出中的数组与字符串中的字符串之间的区别所需的输出。任何人都可以解释为什么这是?此外,如果有什么更好的分类我的问题的术语?

+1

看起来像一个错误。我敢打赌,开发者会对bug报告感到高兴。 – kutschkem

+0

是啊......我在代码页上发现了错误,看起来项目不再被支持......看到我的答案。 – Reimius

回答

-1

貌似奇怪的行为,但如果put尝试将值转换成一个JSONObject,如果我解释documentation正确看来,你需要引用一些字符串:

字符串不需要在被引用如果它们不以引号或单引号开头,并且它们不包含前导空格或尾随空格,并且它们不包含任何以下字符:{ } [ ]/\ : , = ; #,并且如果它们看起来不像数字并且它们不是保留字true,falsenull

这意味着你,如果你想有一个字符串,你应该使用:

p.put("some_attribute2","'[3something]'"); 
+0

不起作用。我阅读该文档,该部分用于将JSON编码转换为Java表示。在上面的例子中,我将从Java到JSON。 – Reimius

+0

@Reimius该部分是关于'构造函数',但它不适合那些JSONObject,所以我认为它引用[element(String,Object)](http://json-lib.sourceforge)的第二个参数。 net/apidocs/net/sf/json/JSONObject.html#element%28java.lang.String,%20java.lang.Object%29)将Java转换为JSON的方法。这只是一个猜测,它也适用于'put',它看起来应该是相同的,但没有文档。 – Kapep

+0

你测试过了吗?我相信我做了,但仍然无法工作。 – Reimius