字符串解释为布尔值

时间:2014-02-11 07:16:39

标签: java json

这是我的代码:

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。

2 个答案:

答案 0 :(得分:2)

您所观察到的是预期。引自JSONObject

  

如果字符串不以a开头,则根本不需要引用   引用或单引号,如果它们不包含前导或尾随   空格,如果它们不包含任何这些字符:{ } [ ] / \ : , = ; #,如果它们看起来不像数字,如果它们不是   保留字truefalsenull

答案 1 :(得分:2)

"true"不是JSONObjectJSONObject

  

无序的名称/值对集合。

引用与@devnull相同的来源。 Java没有将String result解释为Boolean,而是将字符串"true"表示的JSON值正确解释为JSON布尔值。显然,它不是名称/值对的集合,用@Leos Literak表示建议使用大括号,冒号和分号:

{ key : "value"; otherkey : true }

我希望这会有所帮助。术语“对象”在Java和JSON中的使用方式截然不同。