【问题标题】:Skip double quotes using JSON path [duplicate]使用 JSON 路径跳过双引号 [重复]
【发布时间】:2019-11-13 10:33:01
【问题描述】:

我有以下 JSON

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}

$.phoneNumbers[:1].type json 路径提取电话号码类型iPhone 值但输出是

[
  "iPhone"
]

我想把它变成像iPhone 这样的简单字符串。如何创建 JSON 路径以去除双引号 "[

【问题讨论】:

    标签: json jsonpath


    【解决方案1】:

    默认情况下,使用JsonPath 处理JSON 意味着您将获得JSONArray 的结果。所以,你必须多做一步才能得到想要的结果。

    例如,

    @Test
    public void test() {
    
         String json = "{\n" +
                 "  \"firstName\": \"John\",\n" +
                 "  \"lastName\" : \"doe\",\n" +
                 "  \"age\"      : 26,\n" +
                 "  \"address\"  : {\n" +
                 "    \"streetAddress\": \"naist street\",\n" +
                 "    \"city\"         : \"Nara\",\n" +
                 "    \"postalCode\"   : \"630-0192\"\n" +
                 "  },\n" +
                 "  \"phoneNumbers\": [\n" +
                 "    {\n" +
                 "      \"type\"  : \"iPhone\",\n" +
                 "      \"number\": \"0123-4567-8888\"\n" +
                 "    },\n" +
                 "    {\n" +
                 "      \"type\"  : \"home\",\n" +
                 "      \"number\": \"0123-4567-8910\"\n" +
                 "    }\n" +
                 "  ]\n" +
                 "}";
    
         net.minidev.json.JSONArray iPhone = JsonPath.parse(json).read("$.phoneNumbers[?(@.type=='iPhone')].type");
    
         System.out.println("Type : " + iPhone.get(0).toString());
    }
    

    ,最终会打印出Type : iPhone

    【讨论】:

    • 感谢您的回复,但我正在寻找 jsonpath 本身的解决方案。框架中有方法返回,所以我不能修改它,只有我在 BDD 步骤中传递了 jsonpath 以验证 json 路径上是否有预期值,例如response should have value 'available' at "$.[?(@.id == '${pet_id}')].status"
    • @Nik 不确定你是否可以直接这样做,据我所知你不能。我会更详细地查看它,如果我取得任何成就,请告诉您。
    【解决方案2】:

    您不能直接从 JSON 路径中删除 [",但是,您可以使用此处提供的替换功能 https://community.apigee.com/questions/63281/how-to-remove-square-bracket-and-double-quotes-fro.html

    var extracted_json = ["vIMS"]; // use context.getVariable("<<extracted-variable>>");
    modifiedJson = JSON.stringify(extracted_json).replace(/[\[\]"]+/g,"");
    context.setVariable("final-variable", modifiedJson)
    

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 2012-10-16
      • 2016-05-31
      • 2021-10-26
      • 2018-07-26
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      相关资源
      最近更新 更多