2017-03-17 36 views
0

好吧,我在這裏掙扎。我從我的PHP服務器(稱爲「結果」)得到以下JSON格式化字符串(編輯我是缺少在最後一個大括號!):無法從Java中的JSON對象提取值

{「L1」:[{「用戶名」:」用戶1" , 「化身」: 「1」},{ 「用戶名」: 「用戶2」, 「化身」: 「2」},{ 「用戶名」: 「用戶3」, 「化身」: 「3」}],」 L2 「:[{」 用戶名 「:」 用戶4" , 「化身」: 「4」},{ 「用戶名」: 「用戶5」, 「化身」: 「5」}]}

我試圖從L1對象(?)中提取具有頭像編號的ArrayList。但是,我得到一個錯誤

org.json.JSONException:值 [{ 「用戶名」: 「用戶1」, 「阿凡達」: 「1」},{ 「用戶名」: 「用戶2」, 「阿凡達」 : 「2」},{ 「用戶名」: 「用戶3」, 「化身」: 「3」}] 在類型的L1 org.json.JSONArray不能轉換到的JSONObject

這是我的代碼:

try { 
       JSONObject jsonObject = new JSONObject(result); 
       JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("L1")); 
       ArrayList<Integer> arrList = new ArrayList<>(); 
       if (jsonArray != null) { 
        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject json = jsonArray.getJSONObject(i); 
         arrList.add(json.getInt("Avatar")); 
         AvatarList = arrList; 
        } 
       } 
       String query_result = "SUCCESS"; 
       if (query_result.equals("FAILURE")) { 

       } else { 
        setAvatars(AvatarList); 
       } 
      } catch (JSONException e) { 
       Log.e("log_tag", "Error converting result "+e.toString()); 
      } 

如果我使用

​​

我得到同樣的錯誤。 有什麼建議嗎? 在此先感謝!

(編輯:我做了在原崗位犯錯了。在JSON字符串缺少大括號感謝那些誰抓住了這一點。)

+1

如果您在jsonlint.com查看此JSON,你會看到它的格式不正確 –

+1

還玩弄http://jsonpath.com/ –

+0

您的JSON是無效的。在後臺正確格式化。粘貼json'jsoneditoronline.org'來驗證錯誤。 –

回答

0

嘗試以下one.Its做工精細。我正在使用json-simple-1.1.1 jar

  String r="{\"L1\":[{\"UserName\":\"User1\",\"Avatar\":\"1\"},{\"UserName\":\"User2\",\"Avatar\":\"2\"},{\"UserName\":\"User3\",\"Avatar\":\"3\"}],\"L2\":[{\"UserName\":\"User4\",\"Avatar\":\"4\"},{\"UserName\":\"User5\",\"Avatar\":\"5\"}]}"; 

     Object obj=JSONValue.parse(r); 
     JSONObject jsonObject = (JSONObject) obj; 

     JSONArray jsonArray = (JSONArray) jsonObject.get("L1"); 

     ArrayList<Integer> arrList = new ArrayList<>(); 
     if (jsonArray != null) { 
      for (int i = 0; i < jsonArray.size(); i++) { 
       JSONObject json = (JSONObject) jsonArray.get(i); 

       arrList.add((Integer.parseInt((String) json.get("Avatar")))); 
       AvatarList = arrList; 
      } 
     } 
     String query_result = "SUCCESS"; 
     if (query_result.equals("FAILURE")) { 

     } else { 
      setAvatars(AvatarList); 
     } 
0

如果有人絆倒了這個,這最終會爲我工作。我真的不明白爲什麼這個工作,我原來的方法沒有......可能與JSONObjects vs JSONArrays vs Strings以及像[,{,}和]之類的東西有關。

  try { 
       JSONObject jsonObject = new JSONObject(result); 
       JSONArray jsonArray = new JSONArray(jsonObject.getString("L1")); 
       ArrayList<Integer> arrList = new ArrayList<>(); 
       if (jsonArray != null) { 
        for (int i = 0; i < jsonArray.length(); i++) { 
         JSONObject json = jsonArray.getJSONObject(i); 
         arrList.add(json.getInt("Avatar")); 
         AvatarList = arrList; 
        } 
       }