【问题标题】:Value of type java.lang.String cannot be converted to JSONArrayjava.lang.String 类型的值无法转换为 JSONArray
【发布时间】:2016-02-21 08:50:42
【问题描述】:

我有一个非常大的常量 JSONArray 来自 Webservice,为了减少数据传输,我想把它放在 Android 中。我记录了所有 JSONArray(来自 web 服务),将它放在一个字符串中并转换为 JSONArray。这是我写的代码:

String additionString =  ""Additions":[{"AdditionID":0,"Type":-1,"Long":" ","Short":" "},{"AdditionID":8,"Type":6,"Long":"English,"Short":"Eng"},{"AdditionID":11,"Type":2,"Long":"French","Short":"Fr."},{"AdditionID":12,"Type":2,"Long":"German","Short":"Ger."}]";

JSONArray AdditionArray = new JSONArray(additionString);

我得到了这个错误:

java.lang.String 类型的增值不能转换为 JSON数组

顺便说一下,字符串在 Android Studio 中是这样的:

 String additionString =  "\"Additions\":[{\"AdditionID\":0,\"Type\":-1,\"Long\":\" \",\"Short\":\" \"},{\"AdditionID\":8,\"Type\":6,\"Long\":"English,\"Short\":\"Eng\"},{\"AdditionID\":11,\"Type\":2,\"Long\":\"French\",\"Short\":\"Fr.\"},{"AdditionID":12,"Type":2,"Long":"German","Short":"Ger."}]";

如何将该字符串转换为 JSONArray?谢谢。

【问题讨论】:

  • 您使用的语法用于提取 json 元素而不是放入新元素..
  • @Mohit 为什么我不能像这样生成一个新的 JSONArray?或者如何使用该日志生成一个?
  • "Additions":[....] 不是 json 数组,而且根本不是有效的 json
  • this answer 将帮助您了解如何制作JSONArray

标签: java android json string


【解决方案1】:
 ""Additions":[{"AdditionID":0,"Type":-1,"Long":" ","Short":" "},{"AdditionID":8,"Type":6,"Long":"English,"Short":"Eng"},{"AdditionID":11,"Type":2,"Long":"French","Short":"Fr."},{"AdditionID":12,"Type":2,"Long":"German","Short":"Ger."}]"

既不是有效的JSONObject,也不是有效的JSONArray。 JSONObject 以{} 开头和结尾

{
    "Additions": [
        {
            "AdditionID": 0,
            "Type": -1,
            "Long": " ",
            "Short": " "
        },
        {
            "AdditionID": 8,
            "Type": 6,
            "Long": "English",
            "Short": "Eng"
        }
    ]
}

一个有效的JSONArray 将是

[
    {
        "AdditionID": 0,
        "Type": -1,
        "Long": " ",
        "Short": " "
    },
    {
        "AdditionID": 8,
        "Type": 6,
        "Long": "English",
        "Short": "Eng"
    }
]

【讨论】:

    【解决方案2】:

    JSONArray 以 [] 开头,JSONObject 以{} 开头。

    所以如果你想在JSONArray 中转换字符串而不是将你的字符串更改为

    String additionString =  "[{'AdditionID':0,'Type':-1,'Long':' ','Short':' '},
    {'AdditionID':8,'Type':6,'Long':'English','Short':'Eng'},
    {'AdditionID':11,'Type':2,'Long':'French','Short':'Fr.'},
    {'AdditionID':12,'Type':2,'Long':'German','Short':'Ger.'}]";
    

    【讨论】:

      【解决方案3】:

      你正在解析的json字符串有问题("Long":"English does not end with ")。另外,字符串应该是jsonobject(within {})或者jsonArray。 因此,您可以按以下方式进行所需的操作:

      字符串 s="{\"Additions\":[{\"AdditionID\":0,\"Type\":-1,\"Long\":\"\",\"Short\":\" \ "},{\"AdditionID\":8,\"Type\":6,\"Long\":\"English\",\"Short\":\"Eng\"},{\"AdditionID\ ":11,\"Type\":2,\"Long\":\"French\",\"Short\":\"Fr.\"},{\"AdditionID\":12,\"Type \":2,\"Long\":\"German\",\"Short\":\"Ger.\"}]}"; JSONObject jsonObject=新的 JSONObject(s); JSONArray jsonArray=jsonObject.getJSONArray("Additions"); System.out.print(jsonArray.getJSONObject(0).getString("Type"));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多