如何将具有内部对象的对象转换为JSON

时间:2018-02-14 13:03:08

标签: java json

我有一个如下对象

 public class Employee{
  String firstName;
  String lastName;
  String address;
  String phoneNumber;
  List<Contacts> Contacts;

}

 public class Contacts{
  String name;
  String Address;
  String phoneNumber;
}

现在考虑使用应用程序内部的值设置Employee对象,当我尝试将名称 empObject (包含所有值)的对象转换为JSON时,如下所示

ObjectMapper mapper= new ObjectMapper();
String employeeObjToJSON =mapper.writeValueAsString(empObject);
System.out.println("JSON employee Object" +employeeObjToJSON)

我得到了值

{"firstName":"Sawyer","lastName":"Ford","phone":"4555454553", "address": "SNJFJJFJ", "contacts":[{"phoneNumber": "122333"},{"phoneNumber":"122222"}]}

仅为内部对象打印电话号码。我应该如何获得JSON中的完整对象

2 个答案:

答案 0 :(得分:3)

你的班级结构似乎有些偏差。为什么Employee类将联系人列表作为String而不是Contact对象列表?

我建议你像这样更改你的Employee类:

public class Employee {
  String firstName;
  String lastName;
  String address;
  String phoneNumber;
  List<Contact> contacts;
}

public class Contact {
  String name;
  String address;
  String phoneNumber;
}

使用这个类结构,使用ObjectMapper将它们映射到JSON时不应该有任何问题。

修改 关于未显示的空字段,正如我在评论中所写,默认情况下杰克逊应该序列化它们,你应该在响应中看到它们。

如果不是这种情况,可能是某个地方覆盖了此序列化功能...尝试将以下配置设置为对象映射器,看看它是否有效:mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS)

或者,您也可以在您的Employee类和Contact类中使用Jackson注释@JsonInclude(JsonInclude.Include.ALWAYS),就像ibenjelloun在他/她的回答中所建议的那样。

答案 1 :(得分:2)

您是否尝试过以下类注释:

@JsonInclude(JsonInclude.Include.ALWAYS)

根据javadoc,这是默认值,也许它会被代码中的某处覆盖?