我有以下 Json 结构,
{
"MyData": {
"Type": "ABC",
"Id": "567",
"Number": "888"
},
"RefId": "9999",
"DataValues": [
{
"NumberList": [
"7777777"
],
"NumberId": "888888888",
"Phone": "0000000",
}
]
}
下面是我解析 Json 以获取 NumberList 中的值的代码,
String jsonResponse = "{ \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}";
List<Map<String, Object>> responseValue = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("NumberList");
String number = responseValue.get(0).get("NumberList").toString().replace("[", "").replace("]", "");
System.out.println("number --> " + number);
输出是
号码 --> “7777777”
输出中存在双引号
如何在这里获得正确的输出,只需要值 7777777
通过放心的 jsonPath,我得到了以下代码的正确输出。
List<Map<String, Object>> responseValue = new io.restassured.path.json.JsonPath(jsonResponse).get("NumberList");
String number = responseValue.get(0).get("NumberList").toString().replace("[", "").replace("]", "");
但我不想使用放心的jsonPath。
如何使用 jayway JsonPath 获得正确的输出??
首先,我想你的意思可能是
JsonPath.parse(jsonResponse).read("DataValues")
但不是
JsonPath.parse(jsonResponse).read("NumberList")
其次,最好使用 net.minidev.json.JSONArray.get() 而不是这样的 toString()
String jsonResponse = "{ \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",
\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],
\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}";
List<Map<String, Object>> responseValue = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("DataValues");
net.minidev.json.JSONArray jsonArray = (net.minidev.json.JSONArray) responseValue.get(0).get("NumberList");
String number = (String) jsonArray.get(0);
System.out.println("number --> " + number);
输出是
号码 --> 7777777