如何只读取JAVA中具有嵌套数组的JSON对象的值部分

时间:2017-08-03 05:30:56

标签: java json jackson

我找到了从JAVA中的JSON对象获取特定Key值的方法。但是现在对于特定的URL,需要找到获取所有值的方法。这基本上是对这个结果数组进行搜索。请让我知道这样做的方法。 注意:我是Jackson API的新手,尝试使用它,但无法成功。

以下是URL的示例响应JSON响应:

"content": [{
        "id": 1068,
        "name": "A",
        "place": []
    }, {
        "id": 1284,
        "name": "B",
        "Breed": "Pug",
        "place": [{
                "pincode": 1469,
                "City": "Bangalore",
                "Owner": [{
                        "name": "John",
                        "Family": {
                            "Son": {
                                "id": 215,
                                "Age": 18
                            },
                            "Daughter": {
                                "id": 558,
                                "Age": 20
                            }
                        }
                }]
        }]
}]

具体来说,我想要以下输出: 1068 一个 1284 乙 泥料 1469 班加罗尔 约翰 215 18 558 20

1 个答案:

答案 0 :(得分:0)

让我们练习java。 我将一些键更改为小写键。

ex)"Breed": "Pug","breed": "Pug",

.
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── mycompany
    │               └── app
    │                   ├── App.java
    │                   ├── Content.java
    │                   ├── Contents.java
    │                   ├── Owner.java
    │                   ├── Person.java
    │                   └── Place.java
    └── test
        └── java
            └── com
                └── mycompany
                    └── app

11 directories, 7 files

您可以在根目录中执行此操作。

$ mvn编译exec:java @ app

---------
Golly... 
---------
1068
A

1284
B
Pug
1469
Bangalore
John
215
18
558
20
---------
Howdy!   
---------
Contents(content=[Content(id=1068, name=A, breed=null, place=[]), Content(id=1284, name=B, breed=Pug, place=[Place(pincode=1469, city=Bangalore, owner=[Owner(name=John, family={Son=Person(id=215, age=18), Daughter=Person(id=558, age=20)})])])])

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
          <execution>
            <id>app</id>
            <goals>
              <goal>java</goal>
            </goals>
            <configuration>
              <!-- mvn exec:java@app -->
              <mainClass>com.mycompany.app.App</mainClass>
              <arguments/>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.16</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

App.java

package com.mycompany.app;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.HashMap;
import java.util.Map;
import java.util.List;

import java.io.IOException;

public class App {

    public static void main(String[] args) throws IOException {
        String json = ""
            + "\"content\": [{"
            + "        \"id\": 1068,"
            + "        \"name\": \"A\","
            + "        \"place\": []"
            + "    }, {"
            + "        \"id\": 1284,"
            + "        \"name\": \"B\","
            + "        \"breed\": \"Pug\","
            + "        \"place\": [{"
            + "                \"pincode\": 1469,"
            + "                \"city\": \"Bangalore\","
            + "                \"owner\": [{"
            + "                        \"name\": \"John\","
            + "                        \"family\": {"
            + "                            \"Son\": {"
            + "                                \"id\": 215,"
            + "                                \"age\": 18"
            + "                            },"
            + "                            \"Daughter\": {"
            + "                                \"id\": 558,"
            + "                                \"age\": 20"
            + "                            }"
            + "                        }"
            + "                }]"
            + "        }]"
            + "}]";

        ObjectMapper mapper = new ObjectMapper();
        Contents contents = mapper.readValue("{" + json + "}", Contents.class);

        System.out.println("---------");
        System.out.println("Golly... ");
        System.out.println("---------");

        for (Content con : contents.getContent()) {
            System.out.println(con.getId()    == null ? "" : con.getId()   );
            System.out.println(con.getName()  == null ? "" : con.getName() );
            System.out.println(con.getBreed() == null ? "" : con.getBreed());

            for (Place place : con.getPlace()) {
                System.out.println(place.getPincode() == null ? "" : place.getPincode());
                System.out.println(place.getCity()    == null ? "" : place.getCity()   );

                for (Owner owner : place.getOwner()) {
                    System.out.println(owner.getName() == null ? "" : owner.getName());

                    for (Person p : owner.getFamily().values()) {
                        System.out.println(p.getId()  == null ? "" : p.getId());
                        System.out.println(p.getAge() == null ? "" : p.getAge());
                    }
                }
            }
        }

        System.out.println("---------");
        System.out.println("Howdy!   ");
        System.out.println("---------");

        System.out.println(contents.toString());
    }
}

Contents.java

package com.mycompany.app;

import java.util.List;
import lombok.Data;

@Data
public class Contents {
    private List<Content> content;
}

Content.java

package com.mycompany.app;

import java.util.List;
import lombok.Data;

@Data
public class Content {
    private Integer id;
    private String name;
    private String breed;
    private List<Place> place;
}

Place.java

package com.mycompany.app;

import java.util.List;
import lombok.Data;

@Data
public class Place {
    private Integer pincode;
    private String city;
    private List<Owner> owner;
}

Owner.java

package com.mycompany.app;

import java.util.List;
import java.util.Map;
import lombok.Data;

@Data
public class Owner {
    private String name;
    private Map<String, Person> family;
}

Person.java

package com.mycompany.app;

import lombok.Data;

@Data
public class Person {
    private Integer id;
    private Integer age;
}