这是我的代码:
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String temp = reader.readLine();
if(temp!=null)
result = new JSONObject(temp);
} catch (Exception e) {
e.printStackTrace();
}
如您所见,我将String分配给String类型对象,但是当代码运行时,result="true"
并且我得到异常:
类型java.lang.Boolean的值true无法转换为JSONObject
这令人沮丧..我应该为{String}对象投射或使用.toString()
吗?为什么它会自动转换为布尔值?
更新 我已经发现,这不是Java问题,但是JSONObject构造函数没有收到有效的JSONObject。
答案 0 :(得分:2)
您所观察到的是预期。引自JSONObject
:
如果字符串不以a开头,则根本不需要引用 引用或单引号,如果它们不包含前导或尾随 空格,如果它们不包含任何这些字符:
{ } [ ] / \ : , = ; #
,如果它们看起来不像数字,如果它们不是 保留字true
,false
或null
。
答案 1 :(得分:2)
"true"
不是JSONObject
。 JSONObject
是
无序的名称/值对集合。
引用与@devnull相同的来源。 Java没有将String
result
解释为Boolean
,而是将字符串"true"
表示的JSON值正确解释为JSON布尔值。显然,它不是名称/值对的集合,用@Leos Literak表示建议使用大括号,冒号和分号:
{ key : "value"; otherkey : true }
我希望这会有所帮助。术语“对象”在Java和JSON中的使用方式截然不同。