java - 将复杂的 java 对象转换为 json

我有一个像下面这样的课-


public class Person {   

    private String firstName;

    private String lastname;

    private Address address;


   // getters and setters

}


public class Address {

    private String streetName;

    private String postCode;

    private Contact contact;

   // getters and setters

}


public class Contact {

    private String telephone;

    private String email;

   // getters and setters

}

我正在使用这样的 gson 库将其转换为 json 对象-


Gson gson = new GsonBuilder()

                    .serializeNulls()

                    .setPrettyPrinting()

                    .create();

        System.out.println(gson.toJson(new Person()));

然后我得到 json 喜欢-


{

  "firstName": null,

  "lastname": null,

  "address": null

}

但我正在寻找一个像 -


{

  "firstName": null,

  "lastname": null,

  "address": {

      "streetName": null,

      "postCode": null,

      "contact": {

         "telephone": null,

         "email": null

       }

   }

}

有人可以帮我实现这一目标吗?


开心每一天1111
浏览 282回答 3
3回答

蓝山帝景

我认为您获得的结果 JSON 是预期的:new Person().address字段为 null(如果您不在Person的构造函数中对其进行初始化),因此将其序列化为null.您正在搜索的输出对应于类似的序列化Person p = new Person();Address a = new Address();a.setContact(new Contact());p.setAddress(a);gson.toJson(p);这是一个Person不同于new Person()...的实例

慕姐4208626

只需将您的 Person 类更改为public class Person {       private String firstName;    private String lastname;    private Address address;    public Person() {        this(new Address());    }    public Person(Address address) {        this.address = address;    }    // getters and setters}否则没有地址,因此JSON 中的null

饮歌长啸

您应该将地址作为对象添加到您的人员类中,而不是为空。修改您的代码 - 将构造函数添加到 Person 以地址对象作为参数  public class Person {        private String firstName;        private String lastname;        private Address address;        public Person(Address address) {            this.address=address;        }        // getters and setters    }然后用这个替换打印行:System.out.println(gson.toJson(new Person(new Address())));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java