org.json.JSONException:字符14处的未终止对象

时间:2011-11-26 13:50:16

标签: java android json

我收到的错误信息是:

org.json.JSONException: Unterminated object at character 14 of {address: yo test}

我认为我应该逃避字符串,但在StackOverflow上尝试所有方法后徒劳无功 这是我的代码,非常感谢任何帮助:

// src/Activity.java
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    try{
        String str = getString(R.string.data);
        JSONObject jsonObj = new JSONObject(str);
    }
    catch(Exception e){
        Log.d("iLoveDrinkActivity", e.toString());
        // org.json.JSONException: Unterminated object at character 14 of {address: yo test}
    }
}

和...

// res/strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="data">{"address": "yo test"}</string>
</resources>

如果“地址”是“test”或“yo”或“123”之类的东西,那么一切正常。 再次感谢!!

3 个答案:

答案 0 :(得分:14)

我能找到的唯一解决方案(Android: Json string with spaces gives "Unterminated object at" exception)是用转义引号替换json中的引号

<string name="data">{"address": \"yo test\"}</string>

虽然烦人。不知道是否有更好的解决方案。

编辑:

经过多一点挖掘,看起来罪魁祸首是getString方法声称

  

返回与特定资源ID关联的字符串值。它   将被删除任何样式的文本信息。

样式化文本的剥离发生在本机代码中,所以我看不出它为什么抛出引号,但看起来就是这样。

答案 1 :(得分:1)

使用

<string name="data">{"address": \"yo test\"}</string>

否则json解析器将处理字符串 {address:yo test} ,这不是有效的json字符串,而 {address:&#34; yo test&#34;} < / em>是。

答案 2 :(得分:0)

与问题没有直接关系,但是当它尝试解析格式错误的json时出现了此错误。我错过了两个属性之间的逗号。 (使用gson)