为什么我无法访问json中的对象?

时间:2014-03-25 10:47:29

标签: java json servlets

我有这个json字符串,来自java脚本:

[{"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.

为什么我无法访问它?我知道我错过了很小的一部分,但我无法理解并找到它。

4 个答案:

答案 0 :(得分:3)

似乎data字段是JSONArray。你需要通过索引获取元素,请参考代码:

更新:

使用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();
    }

答案 1 :(得分:1)

dataObj的值是键值对的数组。因此,您需要先获取数组并遍历数组并获取clientNumber的值。

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

答案 2 :(得分:1)

使用Gson Library,您可以执行以下操作:

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

答案 3 :(得分: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);
       }
   }   
}