【问题标题】:org.json.JSONException: Unterminated object at character 14org.json.JSONException:字符 14 处的未终止对象
【发布时间】:2011-11-26 13:50:16
【问题描述】:

我得到的错误信息是:

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”之类的其他内容,则一切正常。 再次感谢!!

【问题讨论】:

  • 看起来你只有一个未转义的字符串。当你试图逃避它时发生了什么/你是如何试图逃避它的?
  • 我试过“java.net.URLEncoder.encode(queryStr, "UTF-8");", "TextUtils.htmlEncode(queryStr);", 和 ,但得到了相同的结果。事实上,我不确定我应该怎么做才能转义字符串。

标签: java android json


【解决方案1】:

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

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

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

编辑:

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

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

样式文本的剥离发生在本机代码中,所以我看不出它为什么会抛出引号,但看起来确实如此。

【讨论】:

  • String.valueOf(getText(R.string.data)) 也不起作用。还是谢谢!
  • 那是因为getString调用了getText,而getText最终又调用了去掉引号的native方法
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    使用

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

    否则 json 解析器将处理字符串 {address: yo test},这不是一个有效的 json 字符串,而 {address: "yo test"} 是。

    【讨论】:

    • 是的,它有效。但是,如果我无法更改 strings.xml 中的数据,我该怎么办?谢谢。
    • @Rainbowbreeze 如何从代码中动态更改它
    • 在我的 fcm 响应“url”=fdssafas 当我在 FirebaseMessageService onMessageRecived 中点击发送消息时出现异常:在字符 36 处未终止的对象..请帮助我
    【解决方案4】:

    我遇到了类似的问题。

    下面是一个有错误的请求。

    https://.../getInfo?...&DATA=[{...,KEY="2500000001”}]

    你能注意到吗?

    特殊符号“被包括在内。

    【讨论】:

    • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    相关资源
    最近更新 更多