2014-03-25 159 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); 
     } 
    } 
} 
相关问题