【问题标题】:JSON exception: org.json.JSONException: Unterminated arrayJSON 异常:org.json.JSONException:未终止的数组
【发布时间】:2021-01-19 21:25:13
【问题描述】:

我正在开发一个 android 应用程序 - 它从服务器请求一些数据,服务器以 JSON 格式返回数据。一切正常,除了 API。调试后发现这个异常:

org.json.JSONException: Unterminated array at character 152 of

{
    "total": "2",
    "result": [
        {
            "id": "15",
            "ename": "Horror movies based on true stories",
            "vname": "Những phim kinh dị dựa trên chuyện có thật",
            "movies": "16"
        }{
            "id": "14",
            "ename": "IMDB Top 250",
            "vname": "250 bộ phim hay nhất mọi thời đại",
            "movies": "127"
        }{
            "id": "13",
            "ename": "10 good movies for women",
            "vname": "10 bộ phim hay dành cho phái đẹp",
            "movies": "10"
        }{
            "id": "12",
            "ename": "The 84th Annual Academy Awards",
            "vname": "Giải Oscars lần thứ 84 (2012)",
            "movies": "37"
        }{
            "id": "11",
            "ename": "Charlie Chaplin collection",
            "vname": "Tuyển tập hề Sác lô",
            "movies": "7"
        }{
            "id": "10",
            "ename": "Tuyển tập điệp viên 007",
            "vname": "007 collection",
            "movies": "23"
        }{
            "id": "9",
            "ename": "Donnie Yen movies collection",
            "vname": "Tuyển tập phim Chung Tử Đơn",
            "movies": "24"
        }{
            "id": "8",
            "ename": "Back to the Future trilogy",
            "vname": "Tuyển tập "Trởlạitươnglai"",
            "movies": "3"
        }{
            "id": "7",
            "ename": "Stieg Larssons Millennium trilogy",
            "vname": "Bộ tiểu thuyết Millenium của nhà văn Stieg Larsson",
            "movies": "3"
        }{
            "id": "6",
            "ename": "Chan Wook Parks vengeance trilogy",
            "vname": "Bộ ba phim Báo thù của đạo diễn Park Chan Wook",
            "movies": "3"
        }
    ]
}

我在互联网上搜索过,但没有运气。我也数到第 152 个字符,但没有错!请帮帮我!

【问题讨论】:

  • 你检查过jsonlint.com中的json
  • 它会告诉你你的 json 是否有效
  • 我认为每个对象都应该用逗号分隔对吗?
  • 小心。对他来说,这两个字符点意味着 JSON 键的值。您必须找到将所有内容合并到字符串中的方法

标签: java android json


【解决方案1】:

我看错了:

数组中的元素应该用逗号分隔:

{
    "total":"2",
    "result":  [
        {
            "id":"15",
            "ename":"Horror movies based on true stories",
            "vname":"Nh?ng phim kinh d? du?a tren chuye?n co? tha?t",
            "movies":"16"
        }**,COMMA**
        {
            "id":"14",
            "ename":"IMDB Top 250","vname":"250 b? phim hay nh?t m?i th?i d?i",
            "movies":"127"
        }
    ]
}

请注意,我放置字符串COMMA 只是为了在该位置下划线。您只需要添加, 而无需添加COMMA。

【讨论】:

  • 哈哈哈比我快1秒。是的,json 数组中缺少逗号
【解决方案2】:

当您想在 json 中使用引号时,您必须使用转义引号。像这样:

[{"vname": "Tuyển tập \"Trởlạitươnglai\""}]

【讨论】:

    【解决方案3】:

    你的回复一定是这样的

    {
        "total": "2",
        "result": [
            {
                "id": "15",
                "ename": "Horror movies based on true stories",
                "vname": "Những phim kinh dị dựa trên chuyện có thật",
                "movies": "16"
            },
            {
                "id": "14",
                "ename": "IMDB Top 250",
                "vname": "250 bộ phim hay nhất mọi thời đại",
                "movies": "127"
            },
            {
                "id": "13",
                "ename": "10 good movies for women",
                "vname": "10 bộ phim hay dành cho phái đẹp",
                "movies": "10"
            },
            {
                "id": "12",
                "ename": "The 84th Annual Academy Awards",
                "vname": "Giải Oscars lần thứ 84 (2012)",
                "movies": "37"
            },
            {
                "id": "11",
                "ename": "Charlie Chaplin collection",
                "vname": "Tuyển tập hề Sác lô",
                "movies": "7"
            },
            {
                "id": "10",
                "ename": "Tuyển tập điệp viên 007",
                "vname": "007 collection",
                "movies": "23"
            },
            {
                "id": "9",
                "ename": "Donnie Yen movies collection",
                "vname": "Tuyển tập phim Chung Tử Đơn",
                "movies": "24"
            },
            {
                "id": "8",
                "ename": "Back to the Future trilogy",
                "vname": "Tuyển tập Trởlạitươnglai",
                "movies": "3"
            },
            {
                "id": "7",
                "ename": "StiegLarssonsMillenniumtrilogy",
                "vname": "BộtiểuthuyếtMilleniumcủanhàvănStiegLarsson",
                "movies": "3"
            },
            {
                "id": "6",
                "ename": "ChanWookParksvengeancetrilogy",
                "vname": "BộbaphimBáothùcủađạodiễnParkChanWook",
                "movies": "3"
            }
        ]
    }
    

    此外,您的一个值包含 " 额外的 Trở lại tương lai 所以只需删除它。

    【讨论】:

    • and moreover your on value contains " extra Trở lại tương lai so just remove that. 你可以转义" like\",上面是正确的,你在 {} 之间缺少逗号
    【解决方案4】:

    这有帮助吗? Android: Json string with spaces gives "Unterminated object at" exception

    您似乎需要查找一些有关如何形成 JSON 数组的示例。

    【讨论】:

      【解决方案5】:

      这是你的 json 数组,你的 Jsonarray result 中的每个元素后面都缺少逗号

      您可以检查您的 JSON 是否有效 here 或 here

      {
        "total": "2",
        "result": [
          {
            "id": "15",
            "ename": "Horror movies based on true stories",
            "vname": "Những phim kinh dị dựa trên chuyện có thật",
            "movies": "16"
          }{
            "id": "14",
            "ename": "IMDB Top 250",
            "vname": "250 bộ phim hay nhất mọi thời đại",
            "movies": "127"
          }{
            "id": "13",
            "ename": "10 good movies for women",
            "vname": "10 bộ phim hay dành cho phái đẹp",
            "movies": "10"
          }{
            "id": "12",
            "ename": "The 84th Annual Academy Awards",
            "vname": "Giải Oscars lần thứ 84 (2012)",
            "movies": "37"
          }{
            "id": "11",
            "ename": "Charlie Chaplin collection",
            "vname": "Tuyển tập hề Sác lô",
            "movies": "7"
          }{
            "id": "10",
            "ename": "Tuyển tập điệp viên 007",
            "vname": "007 collection",
            "movies": "23"
          }{
            "id": "9",
            "ename": "Donnie Yen movies collection",
            "vname": "Tuyển tập phim Chung Tử Đơn",
            "movies": "24"
          }{
            "id": "8",
            "ename": "Back to the Future trilogy",
            "vname": "Tuyển tập "Trởlạitươnglai"",
            "movies": "3"
          }{
            "id": "7",
            "ename": "Stieg Larssons Millennium trilogy",
            "vname": "Bộ tiểu thuyết Millenium của nhà văn Stieg Larsson",
            "movies": "3"
          }{
            "id": "6",
            "ename": "Chan Wook Parks vengeance trilogy",
            "vname": "Bộ ba phim Báo thù của đạo diễn Park Chan Wook",
            "movies": "3"
          }
        ]
      }
      

      【讨论】:

        【解决方案6】:

        我刚刚解决了同样的问题。该代码正在创建一个简单的 json 文件,然后读取相同的 json 文件。 Read 抛出了同样的异常。在将字节转换为字符串时,我添加了编码,它解决了这个问题。

        private void PlayWithJson() {
            File dir = new File(Environment.getExternalStorageDirectory() + "/folder");
            if (!dir.exists()) {
                dir.mkdirs();
            }
            if (dir.exists()) {
            {
                File textfile = new File(Environment.getExternalStorageDirectory() + "/folder/file.json");
                try {
                    JSONObject jsonRoot = new JSONObject();
                    jsonRoot.put("MagicNumber","8461684368431684684186464");
                    jsonRoot.put("Note","develop android is lame");
                    FileOutputStream stream = new FileOutputStream(textfile);
                    byte[] jsonBytes = jsonRoot.toString().getBytes(Charset.forName("UTF8"));
                    stream.write(jsonBytes);
                    stream.close();
                } catch (Exception e) {
                    Log.d("Write Throw Up",e.getMessage());
                }
            }
            {
                File textfile = new File(Environment.getExternalStorageDirectory() + "/folder/file.json");
                try {
                    int length = (int) textfile.length();
                    byte[] bytes = new byte[length];
                    FileInputStream in = new FileInputStream(textfile);
                    in.read(bytes);
                    in.close();
                    String jsonStr = new String(bytes, Charset.forName("UTF8"));
                    JSONObject readJson = new JSONObject(jsonStr);
                    String MagicNumber = "";
                    String Note = "";
                    if (!readJson.optString("MagicNumber").isEmpty()) {
                        MagicNumber = readJson.optString("MagicNumber");
                    }
                    if (!readJson.optString("Note").isEmpty()) {
                        Note = readJson.optString("Note");
                    }
                    String contents = new String(MagicNumber+"\n"+Note);
                    Toast.makeText(getApplicationContext(), contents, Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    Log.d("Read Throw Up",e.getMessage());
                }
            }
        }
        

        希望对你有用。

        【讨论】:

          猜你喜欢
          • 2014-11-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-22
          • 1970-01-01
          相关资源
          最近更新 更多