Json-Antwort-zu-string-Array

Möchte ich meine konvertieren der json-string in string-array. Mein JSON-string wird mit zwei Parameter „href“ und „name“. Ich möchte die Erstellung einer Liste von string-Werte des „name“ – parameter mit java. Ich bin mit NetBeans für meine Anwendung. bitte helfen Sie mir dieses Problem zu beheben. Ich bin immer Fehler wie

Exception in thread „AWT-EventQueue-0“ org.json.JSONException: Ein JSONArray-text beginnt mit ‚[‚ bei 1 [Zeichen 2 Zeile 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"));
}

Dies ist mein JSON-string

[
    {
        "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"
    }
]
  • Was bedeutet die Antwort enthalten? Wie die Fehlermeldung sagt uns, dass es nicht beginnend mit „[„
  • Aus irgendeinem Grund Ihr string ist kein Gültiger JSON-string, also die json-man-show ist nicht der input json
  • Json-stringI gepostet hast, ist die Antwort, die ich erhalte von meinem rest-api Abfrage
  • Ich habe Ihre Beispiel und meine Sicht Prima funktioniert.Das problem ist also, dass deine Antwort ein bisschen ein anderes als dieses
  • System.aus.println(response.Körper().toString()); immer [email protected] nicht die tatsächliche Antwort-warum ist das so ?
InformationsquelleAutor Parth | 2017-06-19



2 Replies
  1. 0

    Fixieren Sie Ihre json. 1. Ändern Sie die eckigen Klammern um die geschweiften Klammern. 2. Jedes Wörterbuch Innenseite von json ist ein Wert, der muss über einen entsprechenden Schlüssel. Ihr code sollte wie folgt Aussehen:

    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));
            }
        }

    Ich die zusätzlichen Tasten von data_0 zu data_8. Dann erstellen Sie eine Liste. Wahrscheinlich ist, dass nicht genau Ihr problem lösen, aber zumindest eine Vorstellung, wo du bist einen Fehler zu machen.

  2. 0

    Aus deinem Kommentar können wir sehen, dass Sie mit okhttp3.internal.http.RealResponseBody. Da die toString() – Methode ist nicht überschrieben, wird die default-Implementierung verwendet wird, das ist, warum System.out.println(response.body().toString()); Drucke [email protected].

    Zu Holen Sie sich die aktuellen raw-Antwort verwenden Sie die string() Methode:

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

    Entsprechend der Dokumentation (RealResponseBody erstreckt ResponseBody):

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

    Dies auch schon besprochen wurde hier durch die Art und Weise.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.