Java 为什么我能';我不能访问json中的对象吗?
我有一个json字符串,来自java脚本: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"},{"
[{"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
,我已经更新了代码并在本地进行了测试。请试一试。