我收到的错误信息是:
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”之类的东西,那么一切正常。 再次感谢!!
答案 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)