首页 > 解决方案 > 使用 JSON 路径跳过双引号

问题描述

我有以下 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].typejson 路径来提取电话号码类型iPhone值,但输出是

[
  "iPhone"
]

我想把它作为简单的字符串,比如iPhone. 如何创建 JSON 路径以去除双引号"[

标签: jsonjsonpath

解决方案


By default, using JsonPath to process JSON means you will get the result as a JSONArray. So, you have to make one more step to get the desired result.

For example,

@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());
}

, will eventually print Type : iPhone


推荐阅读