我有这个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.
为什么我无法访问它?我知道我错过了很小的一部分,但我无法理解并找到它。
答案 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);
}
}
}