android - 如何处理包含带括号的字符串的 JSON?

标签 android escaping json jsonexception

我正在创建一个从互联网(通过 AsyncTask)获取 JSON 文件的 Activity 。 我遇到了这个错误:org.json.JSONException: Unterminated string at character...

我检查了我在应用程序中下载的 JSON 文件,发现有一个包含括号的对象。这是可疑的 JSON 对象:

[{ ... }{"id":"5674563646","cat":"未分类","subcat":"未分类","name":"Tecno Lab","desc": "我们的营业时间是晚上 8 点到 10 点,[大多数] 周六是中午 12 点到 6 点。","addr":"Main Street","city":"New York","country":"United States"} { ... }]

那么,如何从我的 Activity 中转义括号?

这是我下载 JSON 文件的 AsyncTask 部分:

protected String doInBackground(String... urls) {
    int timeout = 10;
    int i, count = 0;

    BasicHttpParams basicParams = new BasicHttpParams();
    HttpConnectionParams.setConnectionTimeout(basicParams, timeout * 1000);
    HttpConnectionParams.setSoTimeout(basicParams, timeout * 1000 );
    DefaultHttpClient client = new DefaultHttpClient(basicParams);

    StringBuilder stringBuilder = new StringBuilder();
    for (i = 0; i < urls.length; i++) {
        HttpGet request = new HttpGet(urls[i]);
        request.addHeader("Cache-Control", "no-cache");

        try {
            HttpResponse response = client.execute(request);
            HttpEntity entity = response.getEntity();
            InputStreamReader in = new InputStreamReader(entity.getContent());
            BufferedReader reader = new BufferedReader(in);
            String line = "";

            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);

                count++;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        publishProgress(count * 100 / urls.length);
    }
    return stringBuilder.toString();
}

protected void onPostExecute(String result) {
    super.onPostExecute(result);

...
    JSONArray ja = new JSONArray(result);
...

最佳答案

JSON 响应通常包含两种括号 {}[],但这两种括号的含义和用途完全不同。而第一个代表JSON Object,第二个代表JSON Array。

在您下载的 JSON 文件中,问题与 [most] 单词无关,因为它在 双引号 中。您的 JSON 输入中的问题是 "addr": "Main Street"。那里缺少开头的双引号。

更正的 JSON 输入:

{"id":"5674563646","cat":"Uncategorized","subcat":"Uncategorized","name":"Tecno Lab","desc":"We run open hours from 8-10pm and [most] Saturdays from 12-6pm.","addr":"Main Street","city":"New York","country":"United States"}

关于android - 如何处理包含带括号的字符串的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33902103/

相关文章:

c++读取文件\在文本中

javascript - 如何获取与另一个给定值匹配的 JSON 对象的键值?

android - 如何检查两个微调器的状况?

bash - 在不重新启动 xterm 的情况下重新加载 .Xresources

android - 空白的应用程序界面,由于切换到Android Studio而没有响应

javascript - 如何正确转义 querySelector() 字符

ruby-on-rails - 是否有任何库来管理 Rails 应用程序的数据库字段中的 json 内容?

java - 无法从 START_OBJECT token 中反序列化 `java.lang.Boolean` 的实例

android - 尝试在 TabHost 中打开 WebView

android - 如何使用 Android 在通话中播放声音?