2014-02-11 65 views
0

这里是我的代码:字符串解释为布尔

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(); 
} 

正如你看到的,我给你串来串类型的对象,但是当代码运行,result="true"我得到异常:

价值的真实java.lang.Boolean类型不能被转换为JSONObject的

这是令人沮丧的。我应该为一个String对象铸造或使用.toString()?为什么它会自动转换为布尔值?

更新 我已经想通了,这不是Java问题,但JSONObject构造函数没有收到有效的JSONObject。

+2

嗯,'true'不是一个JSON对象,它是一个JSON布尔... – fge

+0

变量'temp'的值是什么?这可能是“真的”吗? – AlexR

+0

我在帖子中已经提到它:result =“true” –

回答

2

你正在观察的是预计。从JSONObject报价:

弦乐并不需要在所有的,如果他们不与 报价或单引号开始被引用,如果它们不包含开头或结尾 空间,如果他们不包含这些字符中的任何一个:{ } [ ]/ \ : , = ; #,如果它们看起来不像数字,并且它们不是 ,则保留字true,falsenull

2

"true"不是JSONObject。 A JSONObject

一个无序的名称/值对集合。

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

{ key : "value"; otherkey : true } 

我希望这有助于。术语'对象'在Java和JSON中的用法非常不同。