Json响应字符串数组

时间:2017-06-19 10:47:33

标签: java json

我想将我的json字符串转换为字符串数组。我的JSON字符串有两个参数" href"和"名称"。我想创建" name"的值字符串列表。使用java的参数。我正在为我的应用程序使用NetBeans。请帮我解决这个问题。我收到错误

  

线程中的异常" AWT-EventQueue-0" org.json.JSONException:JSONArray文本必须以' ['在1 [字符2第1行]

JSONArray arr = new JSONArray(response);
List<String> list = new ArrayList<String>();
for(int i = 0; i < arr.length(); i++){
    list.add(arr.getJSONObject(i).getString("name"));
    System.out.println(arr.getJSONObject(i).getString("name"));
}

这是我的JSON字符串

[
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/1",
        "name": "analogValue_1"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/9",
        "name": "analogValue_9"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/2",
        "name": "analogValue_2"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/8",
        "name": "analogValue_8"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/7",
        "name": "analogValue_7"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/3",
        "name": "analogValue_3"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/6",
        "name": "analogValue_6"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/5",
        "name": "analogValue_5"
    },
    {
        "href": "\/api\/rest\/v1\/protocols\/bacnet\/local\/objects\/analog-value\/4",
        "name": "analogValue_4"
    }
]

2 个答案:

答案 0 :(得分:0)

修复你的json。 1.将方括号更改为花括号。 2. json中的每个字典都是一个必须具有相应键的值。您的代码应如下所示:

public static void main(String[] args) {

        String myJSON = "{data_0:\n"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/1\",\n"
                + "        \"name\": \"analogValue_1\"\n"
                + "    },\n data_1:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/9\",\n"
                + "        \"name\": \"analogValue_9\"\n"
                + "    },\n data_2:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/2\",\n"
                + "        \"name\": \"analogValue_2\"\n"
                + "    },\n data_3:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/8\",\n"
                + "        \"name\": \"analogValue_8\"\n"
                + "    },\n data_4:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/7\",\n"
                + "        \"name\": \"analogValue_7\"\n"
                + "    },\n data_5:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/3\",\n"
                + "        \"name\": \"analogValue_3\"\n"
                + "    },\n data_6:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/6\",\n"
                + "        \"name\": \"analogValue_6\"\n"
                + "    },\n data_7:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/5\",\n"
                + "        \"name\": \"analogValue_5\"\n"
                + "    },\n data_8:"
                + "    {\n"
                + "        \"href\": \"\\/api\\/rest\\/v1\\/protocols\\/bacnet\\/local\\/objects\\/analog-value\\/4\",\n"
                + "        \"name\": \"analogValue_4\"\n"
                + "    }\n"
                + "}";

        JSONObject jsonObject = new JSONObject(myJSON);
        System.out.println("jsonObject: " + jsonObject.toString());

        List<String> list = new ArrayList<String>();
        System.out.println("jsonObject length: " + jsonObject.length());
        for (int i = 0; i < jsonObject.length(); i++) {
            list.add(jsonObject.getJSONObject("data_" + i).toString());
            System.out.println(jsonObject.getJSONObject("data_" + i));
        }
    }

我将数据从data_0添加到data_8。然后创建一个列表。可能这并不能完全解决你的问题,但最不能说明你犯了什么错误。

答案 1 :(得分:0)

根据您的评论,我们可以看到您正在使用okhttp3.internal.http.RealResponseBody。由于toString()方法未被覆盖,因此使用默认实现,这就是System.out.println(response.body().toString());打印okhttp3.internal.http.RealResponseBody@66cdc1bd的原因。

要获得实际的原始响应,请使用string()方法:

JSONArray arr = new JSONArray(responseBody.string());

根据documentation(RealResponseBody扩展ResponseBody):

String  string()
Returns the response as a string decoded with the charset of the Content-Type header.

顺便提一下,这也已经讨论了here