2017-06-19 68 views
0

我想將我的json字符串轉換爲字符串數組。我的JSON字符串有兩個參數「href」和「name」。我想用java創建「name」參數值的字符串列表。我正在爲我的應用程序使用NetBeans。請幫我解決這個問題。我正在誤差作爲Json對字符串數組的響應

在異常線程 「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" 
    } 
] 
+0

響應包含什麼?由於錯誤消息告訴我們它不是以「[」 – eol

+0

「開頭的由於某種原因你的字符串不是有效的JSON字符串,所以你顯示的JSON不是輸入JSON – Denny

+0

Json stringI已發佈是我從我的休息得到的迴應api查詢 – Parth

回答

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的密鑰。然後你創建一個列表。可能這並不能完全解決你的問題,但至少可以讓你知道你犯了什麼錯誤。

0

從您的評論,我們可以看到你正在使用okhttp3.internal.http.RealResponseBody。由於toString()方法未被覆蓋,所以使用默認實現,這就是爲什麼System.out.println(response.body().toString());打印[email protected]

獲得實際的原始響應使用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