使用 Jackson 解析深度嵌套的 JSON 属性

我正在尝试找到一种干净的方法来解析API.


以下是有效负载的粗略概括JSON:


{

  "root": {

    "data": {

      "value": [

        {

          "user": {

            "id": "1",

            "name": {

              "first": "x",

              "last": "y"

            }

          }

        }

      ]

    }

  }

}

我的目标是拥有一组User具有firstName和lastName字段的对象。


有谁知道一个干净地解析这个的好方法吗?


现在我正在尝试创建一个Wrapper类,并在其中包含用于数据、值、用户等的静态内部类,但这似乎是一种混乱的方式,只是为了读取第一个/最后一个属性的数组。


我用来restTemplate.exchange()调用端点。


翻过高山走不出你
浏览 169回答 2
2回答

杨__羊羊

JsonPath库允许您仅选择必需的字段,然后您可以使用它将Jackson原始数据转换为POJO类。示例解决方案如下所示:import com.fasterxml.jackson.annotation.JsonProperty;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.type.CollectionType;import com.jayway.jsonpath.JsonPath;import java.io.File;import java.util.List;import java.util.Map;public class JsonPathApp {    public static void main(String[] args) throws Exception {        File jsonFile = new File("./resource/test.json").getAbsoluteFile();        List<Map> nodes = JsonPath.parse(jsonFile).read("$..value[*].user.name");        ObjectMapper mapper = new ObjectMapper();        CollectionType usersType = mapper.getTypeFactory().constructCollectionType(List.class, User.class);        List<User> users = mapper.convertValue(nodes, usersType);        System.out.println(users);    }}class User {    @JsonProperty("first")    private String firstName;    @JsonProperty("last")    private String lastName;    public String getFirstName() {        return firstName;    }    public void setFirstName(String firstName) {        this.firstName = firstName;    }    public String getLastName() {        return lastName;    }    public void setLastName(String lastName) {        this.lastName = lastName;    }    @Override    public String toString() {        return "User{" +                "firstName='" + firstName + '\'' +                ", lastName='" + lastName + '\'' +                '}';    }}上面的代码打印:[User{firstName='x', lastName='y'}]

慕斯709654

另一种简单的方法是使用JSON.simple库:JSONParser jsonParser = new JSONParser();        //Read JSON file        Object obj = jsonParser.parse(reader);        JSONObject jObj = (JSONObject) obj;        JSONObject root = (JSONObject)jObj.get("root");        JSONObject data = (JSONObject) root.get("data");        JSONArray value =  (JSONArray) data.get("value");        JSONObject array = (JSONObject) value.get(0);        JSONObject user = (JSONObject) array.get("user");        JSONObject name = (JSONObject) user.get("name");        String lastName = (String) name.get("last");        String firstName = (String) name.get("first");        System.out.println(lastName + " " + firstName);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java