Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何只解析JSON的一部分?_Java_Json_Spring_Parsing_Jackson - Fatal编程技术网

Java 如何只解析JSON的一部分?

Java 如何只解析JSON的一部分?,java,json,spring,parsing,jackson,Java,Json,Spring,Parsing,Jackson,我得到一个json: { "trackResponse": { "shipment": [ { "package": [ { "trackingNumber": "Y0081040217", "deliveryDate"

我得到一个json:

{
"trackResponse": {
    "shipment": [
        {
            "package": [
                {
                    "trackingNumber": "Y0081040217",
                    "deliveryDate": [
                        {
                            "type": "DEL",
                            "date": "20200817"
                        }
                    ],
                    "deliveryTime": {
                        "startTime": "",
                        "endTime": "145339",
                        "type": "DEL"
                    },
                    "activity": [
                        {
                            "location": {
                                "address": {
                                    "city": "TORONTO",
                                    "stateProvince": "",
                                    "postalCode": "",
                                    "country": "CA"
                                }
                            },
                            "status": {
                                "type": "D",
                                "description": "Delivered",
                                "code": "FS"
                            },
                            "date": "20200817",
                            "time": "145339"
                        },

我只想从这个JSON中保存一些东西。例如,[trackingNumber,city,country,type and description]但我不知道应该从java类中选择哪种结构来映射它们。

由于您需要
JSON
中的几个字段,我建议您使用JSONPath API,下面是相同的maven依赖项

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.4.0</version>
</dependency>

您可以在一篇旧文章中使用此函数来搜索关键字,也可以尝试面向流的解析而不是对象映射,并在浏览JSON时记住所有需要的字段。道具:1。不需要额外的依赖关系;2.该文件不需要完全加载到内存中,您可以毫无问题地处理MEG/GIG;3.它的工作速度要快得多(当然,如果这很重要的话)@AnatolyG谢谢你的建议,我现在正试着这么做:)
public static void main(String[] args) throws IOException  {
    String json = "{\r\n" + 
            "   \"trackResponse\":{\r\n" + 
            "      \"shipment\":[\r\n" + 
            "         {\r\n" + 
            "            \"package\":[\r\n" + 
            "               {\r\n" + 
            "                  \"trackingNumber\":\"Y0081040217\",\r\n" + 
            "                  \"deliveryDate\":[\r\n" + 
            "                     {\r\n" + 
            "                        \"type\":\"DEL\",\r\n" + 
            "                        \"date\":\"20200817\"\r\n" + 
            "                     }\r\n" + 
            "                  ],\r\n" + 
            "                  \"deliveryTime\":{\r\n" + 
            "                     \"startTime\":\"\",\r\n" + 
            "                     \"endTime\":\"145339\",\r\n" + 
            "                     \"type\":\"DEL\"\r\n" + 
            "                  },\r\n" + 
            "                  \"activity\":[\r\n" + 
            "                     {\r\n" + 
            "                        \"location\":{\r\n" + 
            "                           \"address\":{\r\n" + 
            "                              \"city\":\"TORONTO\",\r\n" + 
            "                              \"stateProvince\":\"\",\r\n" + 
            "                              \"postalCode\":\"\",\r\n" + 
            "                              \"country\":\"CA\"\r\n" + 
            "                           }\r\n" + 
            "                        },\r\n" + 
            "                        \"status\":{\r\n" + 
            "                           \"type\":\"D\",\r\n" + 
            "                           \"description\":\"Delivered\",\r\n" + 
            "                           \"code\":\"FS\"\r\n" + 
            "                        },\r\n" + 
            "                        \"date\":\"20200817\",\r\n" + 
            "                        \"time\":\"145339\"\r\n" + 
            "                     }\r\n" + 
            "                  ]\r\n" + 
            "               }\r\n" + 
            "            ]\r\n" + 
            "         }\r\n" + 
            "      ]\r\n" + 
            "   }\r\n" + 
            "}";
    
    String[] jsonPaths = new String[5];
    jsonPaths[0] = "$.trackResponse.shipment[*].package[*].trackingNumber";
    jsonPaths[1] = "$.trackResponse.shipment[*].package[*].activity[*].location.address.city";
    jsonPaths[2] = "$.trackResponse.shipment[*].package[*].activity[*].location.address.country";
    jsonPaths[3] = "$.trackResponse.shipment[*].package[*].activity[*].status.description";
    jsonPaths[4]= "$.trackResponse.shipment[*].package[*].activity[*].status.type";
    
    DocumentContext jsonContext = JsonPath.parse(json);
    for (String path : jsonPaths) {
        List<String> result = jsonContext.read(path);
        System.out.println(result.get(0)); //assuming there is only one array else u can iterate
    }       
}
Y0081040217
TORONTO
CA
Delivered
D