【问题标题】:Removing a node in json in Java在Java中删除json中的节点
【发布时间】:2013-12-26 21:14:59
【问题描述】:

给定以下 json:

{
   "User":{
      "firstname":"john",
      "gender":"female",
      "verified":"no"
   }
}

有没有办法删除/忽略“用户”节点,以便我可以使用杰克逊绑定?你看,如果我现在尝试这样做:

User user= mapper.readValue(content, User.class); //where content is the json above

用户类在哪里:

public class User
{
     String _firstname, _gender, _verified;

     [getters and setters]
}

它给出了一个错误提示:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: 无法识别的字段“用户”

我知道我可以初始化 User 类并手动执行设置器,但我想知道是否可以或更好地删除/忽略“用户”节点?

【问题讨论】:

  • 试图理解你为什么想要那个
  • 这样我就可以将 json 绑定到用户类。

标签: java json data-binding jackson


【解决方案1】:

在 JSON 的根目录中,您有另一个名为 User 的 JSON 对象。您不能忽略它,因为它包含您要提取的对象。您需要做的是从嵌套的 JSON 对象而不是根 JSON 对象中提取对象。

您可以通过获取嵌套的 JSON 对象来做到这一点。

ObjectMapper mapper = new ObjectMapper(); 
JsonNode node = mapper.readTree(content);
User user = mapper.readValue(node.get("User").traverse(), User.class);

另外,我不确定 Jackson 是否支持悬空 ,,就像你在结尾处所做的那样

"verified":"no",

【讨论】:

  • 您好,您的回答也很有效,但凯文的回答对我来说更有意义。也感谢您注意到,!我已经相应地编辑了我的问题。
【解决方案2】:

此解决方案通过在ObjectReader 上设置rootName 来使用纯Jackson:

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;

public class User {

    public static void main(String[] args) throws JsonProcessingException, IOException {

        String json = "{\"User\":{\"firstname\":\"john\",\"gender\":\"female\",\"verified\":\"no\"}}";
        ObjectMapper mapper = new ObjectMapper();
        ObjectReader reader = mapper.reader(User.class).withRootName("User");
        User user = reader.readValue(json);

        System.out.println(user.getFirstname());
    }

    private String firstname;
    private String lastname;
    private String verified;
    private String gender;

    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;
    }

    public String getVerified() {
        return verified;
    }

    public void setVerified(String verified) {
        this.verified = verified;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2021-03-30
    • 2018-08-23
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多