以下是将Json字符串转换为json的问题说明。
Address{
private long id;
private String city;
}
Employee{
private long id;
private String name;
private Address address;
}
客户将使用员工的JSON发送请求
{"id": 1, "name": "ABC", "address": {"id": 1, "city": "XYZ"}}
现在我想将输入json转换为以下格式,其中addressId = Address类的id字段。
Output{
private long id;
private String name;
private long addressId;
}
有没有办法实现这一目标。 我也尝试过Jackson和Gson。
答案 0 :(得分:1)
使用Jackson,您可以添加class AddressId
以仅使用id
字段和带有AddressId
作为参数的带注释的构造函数来包装地址。根据需要添加getter和其他构造函数。这不需要仅定义Employee
和Address
类Output
。
class Output {
private long id;
private String name;
private long addressId;
@JsonCreator
public Output(
@JsonProperty("id") long id,
@JsonProperty("name") String name,
@JsonProperty("address") AddressId address) {
this.id = id;
this.name = name;
this.addressId = address.getId();
}
}
class AddressId {
private long id;
}
在这种情况下,您还需要配置ObjectMapper
以静默忽略未知的JSON字段:
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
另一个不需要class AddressId
的替代方案是根据杰塞逊在反序列化时内部使用的addressId
为Map<String, Object>
字段创建自定义设置器。这就是Output
在这种情况下的样子(添加您可能需要的其他setter / getter):
class Output {
private long id;
private String name;
@JsonProperty("address")
public void setAddressId(final Map<String, Object> address) {
addressId = (Integer) address.get("id");
}
private long addressId;
}
答案 1 :(得分:-1)
您可以使用Gson api从json转换对象。
与以下代码类似。不确定它是否没有语法错误。但是,这是可能的。
Gson gson = new Gson();
Employee emp = gson.fromJson("{"id": 1, "name": "ABC", "address": {"id": 1, "city": "XYZ"}}",
Employee.class);
如果上述代码无效,请尝试使用dozer