You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jayway JsonPath获取无引号的NumberList值?

问题:Jayway JsonPath获取NumberList值时去除双引号

原始JSON结构

{  
  "MyData": {    
    "Type": "ABC",    
    "Id": "567",    
    "Number": "888"  
  },  
  "RefId": "9999",  
  "DataValues": [    
    {      
      "NumberList": [        
        "7777777"      
      ],      
      "NumberId": "888888888",      
      "Phone": "0000000"    
    }  
  ]
}

当前Jayway代码及问题

使用以下代码解析时,输出结果带双引号:

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);

输出:number --> "7777777",需要获取不带双引号的7777777,且不想使用RestAssured JsonPath。


解决方法

方法1:使用精准的JsonPath表达式直接定位元素

直接通过表达式定位到NumberList的第一个元素,获取原始字符串值,无需后续处理:

String jsonResponse = "{  \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}";
String number = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("$.DataValues[0].NumberList[0]");
System.out.println("number --> " + number);

输出:number --> 7777777

方法2:正确处理返回的集合类型

修正类型转换,将NumberList强转为List<String>,直接取第一个元素:

String jsonResponse = "{  \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}";
List<Map<String, Object>> dataValues = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("$.DataValues");
List<String> numberList = (List<String>) dataValues.get(0).get("NumberList");
String number = numberList.get(0);
System.out.println("number --> " + number);

输出:number --> 7777777

方法3:字符串处理移除引号(不推荐)

如果必须沿用原有表达式,可额外移除字符串中的双引号,但该方法依赖格式,易出错:

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("]", "").replace("\"", "");
System.out.println("number --> " + number);

输出:number --> 7777777


内容的提问来源于stack exchange,提问作者VinodKhade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:46:24