使用 Jayway JsonPath 解析 Json 响应

问题描述 投票:0回答:1

我有以下 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 获得正确的输出??

java json parsing jsonpath jayway
1个回答
0
投票

首先,我想你的意思可能是

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

© www.soinside.com 2019 - 2024. All rights reserved.