Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我能';我不能访问json中的对象吗?_Java_Json_Servlets - Fatal编程技术网

Java 为什么我能';我不能访问json中的对象吗?

Java 为什么我能';我不能访问json中的对象吗?,java,json,servlets,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"},{"

我有一个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”]未找到。


为什么我不能访问它?我知道我遗漏了一个非常小的部分,但我无法下定决心找到它。

数据对象的值是一个键值对数组。因此,您需要首先获取数组并遍历该数组,然后获取
clientNumber
的值


使用
dataObj.get(0.getString(“clientNumber”)

数据对象的值是一个键值对数组。因此,您需要首先获取数组并遍历该数组,然后获取
clientNumber
的值


使用
dataObj.get(0.getString(“clientNumber”)

似乎
数据
字段是一个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();
    }

似乎
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();
    }

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

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

您可以直接解析到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);
       }
   }   
}

您可以直接解析到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);
       }
   }   
}

它可以工作,但只适用于第一条记录-我无法通过使用
jsonarr.getJSONObject(0)
jsonarr.getJSONObject(1)
@Slim获得
clientName
,我已经更新了代码并在本地测试了它。请试一试。它很有效,但只适用于第一条记录-我无法使用
jsonarr.getJSONObject(0)
jsonarr.getJSONObject(1)
@Slim获得
clientName
,我已经更新了代码并在本地进行了测试。请试一试。