2014-03-25 158 views
0

我有這個JSON字符串,從Java腳本正在添加:爲什麼我不能訪問我的json中的對象?

[{"clientNumber":"33"},{"clientName":"3"},{"clientEik":"3"}] 

當我得到它我的servlet的內部,這裏是我在做什麼:

JSONArray jsonArr = new JSONArray(URLDecoder.decode(mainData, "UTF-8")); 
dataObj.put("data", jsonArr); 

現在它看起來像:

{"data":[{"clientNumber":"33"},{"clientName":"3"},{"clientEik":"3"}]} 

我試圖做的是讓clientNumber通過:

dataObj.getString("clientNumber")

卻是轟炸我一個例外:

org.json.JSONException: JSONObject["clientNumber"] not found.

爲什麼我不能訪問它?我知道我錯過了一個非常小的部分,但我無法讓我的想法找到它。

回答

3

似乎data場是一個JSONArray。您需要通過指數來獲得元素,請裁判代碼:

UPDATE:

使用getJSONObject(index).getString(key)訪問數據:

try { 
     String data = "[{\"clientNumber\":\"33\"},{\"clientName\":\"34\"},{\"clientEik\":\"35\"}]"; 

     JSONArray jsonArr = new JSONArray(URLDecoder.decode(data, "UTF-8")); 
     JSONObject dataObj = new JSONObject(); 
     dataObj.put("data", jsonArr); 

     JSONArray jsonarr = dataObj.getJSONArray("data"); 

     String clientNumber = jsonarr.getJSONObject(0).getString(
       "clientNumber"); 
     System.out.println(clientNumber); 
     String clientName = jsonarr.getJSONObject(1) 
       .getString("clientName"); 
     System.out.println(clientName); 
     String clientEik = jsonarr.getJSONObject(2).getString("clientEik"); 
     System.out.println(clientEik); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

您需要演職員表。 –

+0

它的工作原理,但只適用於第1條記錄 - 我無法通過使用'jsonarr.getJSONObject(0)'或'jsonarr.getJSONObject(1)' – Slim

+0

@Slim獲取'clientName',我更新了代碼並進行了測試我的本地。請嘗試一下。 – 2014-03-25 12:53:34

1

dataObj的值是一組鍵值對。所以你需要首先獲取數組,並遍歷數組並獲得值clientNumber

使用dataObj.get(0).getString("clientNumber");

1

隨着GSON庫,你可以這樣做:

public MyClass { 

     public void doSomething() { 
      JsonArray array = new JsonParser().parse(mainData).getAsJsonArray();   
      JsonObject obj1 = array.get(0).getAsJsonObject(); 
      MyData data = new Gson().fromJson(obj1.toString(), MyData.class);   
      System.out.println(data.getClientNumber());   
     } 

     class MyData { 
     private String clientNumber; 
     public String getClientNumber() {return clientNumber;} 
     public void setClientNumber(String clientNumber) {this.clientNumber = clientNumber;} 
      public String toString() { 
       return String.format("clientNumber:%s", clientNumber); 
      } 
     }   
    } 
1

您可以直接解析到的MyClass陣列,通過陣列式...

public MyClass { 
    public void doSomething() { 
     MyData[] dataArray = new Gson().fromJson(mainData, MyData[].class);   
     System.out.println(dataArray[0].getClientNumber());   
    } 
    class MyData { 
     private String clientNumber; 
     public String getClientNumber() {return clientNumber;} 
     public void setClientNumber(String clientNumber) {this.clientNumber = clientNumber;} 

     public String toString() { 
      return String.format("clientNumber:%s", clientNumber); 
     } 
    } 
} 
相關問題