Java - 通过 json 次迭代获取值
Java - Get values over a json iteration
我在这里要做的是在从 API 调用获得的 Json 对象中迭代,以便搜索与键相关的值。但是我无法从每次迭代中获取元组。来自以下代码:
public void findResponseValue(String param, String inputValue){
ArrayList<String> jsonArray = response.getBody().jsonPath().get("");
Iterator<String> iterator = jsonArray.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
iterator.next();
}
我收到以下错误
java.lang.ClassCastException: class java.util.HashMap 无法转换为 class java.lang.String (java.util.HashMap 和 java.lang.String 在模块中java.base 加载器 'bootstrap')
它正确地遍历了 arrayList,但未能尝试从中获取值。
响应正文示例
[
{
"creationDate": "2017-05-29T07:45:43Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2018-09-26T10:10:12Z",
"updatedBy": "XXX.XXX",
"id": 22,
"partner": "ALS",
"countries": [
],
"countriesCodes": "NL",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPNL",
"flag": false,
"activated": true,
"type": "dcx"
},
{
"creationDate": "2017-06-01T13:22:29Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2017-11-30T12:24:36Z",
"updatedBy": "MMM.T.NNN",
"id": 39,
"partner": "ALS",
"countries": [
],
"countriesCodes": "ES",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPES",
"flag": false,
"activated": true,
"type": "dcx"
}
]
您的回复正文应如下所示:
{"data":[
{
"creationDate": "2017-05-29T07:45:43Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2018-09-26T10:10:12Z",
"updatedBy": "XXX.XXX",
"id": 22,
"partner": "ALS",
"countries": [
],
"countriesCodes": "NL",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPNL",
"flag": false,
"activated": true,
"type": "dcx"
},
{
"creationDate": "2017-06-01T13:22:29Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2017-11-30T12:24:36Z",
"updatedBy": "MMM.T.NNN",
"id": 39,
"partner": "ALS",
"countries": [
],
"countriesCodes": "ES",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPES",
"flag": false,
"activated": true,
"type": "dcx"
}
]}
这是我用过的方法(Gson解析器API用过)。
在 for 循环中,您可以比较您的键或值。
public static void findResponseValue(String param, String inputValue){
JsonObject jsonObject = new JsonParser().parse(jsonResponseBody).getAsJsonObject();
JsonElement jsonElement = jsonObject.get("data");
JsonArray jsonArray = jsonElement.getAsJsonArray();
for (int i = 0; i < jsonArray.size(); i++) {
System.out.println(i+". Array element Content:"+jsonArray.get(i));
JsonObject jsonObj = jsonArray.get(i).getAsJsonObject();
System.out.println("\t creationDate:"+jsonObj.get("creationDate")+" partner:"+jsonObj.get("partner"));
}
}
我在这里要做的是在从 API 调用获得的 Json 对象中迭代,以便搜索与键相关的值。但是我无法从每次迭代中获取元组。来自以下代码:
public void findResponseValue(String param, String inputValue){
ArrayList<String> jsonArray = response.getBody().jsonPath().get("");
Iterator<String> iterator = jsonArray.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
iterator.next();
}
我收到以下错误
java.lang.ClassCastException: class java.util.HashMap 无法转换为 class java.lang.String (java.util.HashMap 和 java.lang.String 在模块中java.base 加载器 'bootstrap')
它正确地遍历了 arrayList,但未能尝试从中获取值。
响应正文示例
[
{
"creationDate": "2017-05-29T07:45:43Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2018-09-26T10:10:12Z",
"updatedBy": "XXX.XXX",
"id": 22,
"partner": "ALS",
"countries": [
],
"countriesCodes": "NL",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPNL",
"flag": false,
"activated": true,
"type": "dcx"
},
{
"creationDate": "2017-06-01T13:22:29Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2017-11-30T12:24:36Z",
"updatedBy": "MMM.T.NNN",
"id": 39,
"partner": "ALS",
"countries": [
],
"countriesCodes": "ES",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPES",
"flag": false,
"activated": true,
"type": "dcx"
}
]
您的回复正文应如下所示:
{"data":[
{
"creationDate": "2017-05-29T07:45:43Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2018-09-26T10:10:12Z",
"updatedBy": "XXX.XXX",
"id": 22,
"partner": "ALS",
"countries": [
],
"countriesCodes": "NL",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPNL",
"flag": false,
"activated": true,
"type": "dcx"
},
{
"creationDate": "2017-06-01T13:22:29Z",
"createdBy": "YYY.YYY",
"lastUpdate": "2017-11-30T12:24:36Z",
"updatedBy": "MMM.T.NNN",
"id": 39,
"partner": "ALS",
"countries": [
],
"countriesCodes": "ES",
"salesChannels": [
{
"code": "Integrated"
}
],
"touchPoints": [
],
"serviceEntity": "AWPES",
"flag": false,
"activated": true,
"type": "dcx"
}
]}
这是我用过的方法(Gson解析器API用过)。 在 for 循环中,您可以比较您的键或值。
public static void findResponseValue(String param, String inputValue){
JsonObject jsonObject = new JsonParser().parse(jsonResponseBody).getAsJsonObject();
JsonElement jsonElement = jsonObject.get("data");
JsonArray jsonArray = jsonElement.getAsJsonArray();
for (int i = 0; i < jsonArray.size(); i++) {
System.out.println(i+". Array element Content:"+jsonArray.get(i));
JsonObject jsonObj = jsonArray.get(i).getAsJsonObject();
System.out.println("\t creationDate:"+jsonObj.get("creationDate")+" partner:"+jsonObj.get("partner"));
}
}