我正在将一个json转换为Java对象,但我没有得到我想要的结果。我的json中有重复的键“friend”。
我的json:
{
"id" : "5ee2e2f780bc8e7511a65de9",
"friends": [{
"friend": {
"id": 1,
"name": "Priscilla Lynch"
},
"friend": {
"id": 2,
"name": "William Lawrence"
}
}]
}
使用ObjectMapper的readValue只会获取最后一个"friend",但是我需要两个。 我知道JSONObject使用Map进行转换,所以它只获取了最后一个。
结果: Contacts(id=5ee2e2f780bc8e7511a65de9, friends=[{friend={id=2, name=William Lawrence}}])
ObjectMapper mapper = new ObjectMapper();
Contacts contacts = mapper.readValue(json, Contacts.class);
联系人数据类:
@Getter
@Setter
@ToString
public class Contacts {
String id;
List<Object> friends;
}
我希望能获得所有朋友的列表。由于提供JSON文件的服务不在我的手中,我需要找到解决方法。 我尝试使用apache.commons中的MultiMap,但没有成功。 我被卡住了。
Friend
吗?因为你可以从JsonNode
中提取它们而无需对其进行反序列化。 - KunLunfriend
的字段。这会使Jackson只选择其中一个(最后一个)。因此,即使您使用JsonNode处理它,第一个friend
也会丢失。您可以执行此操作JsonNode jsonNode = mapper.readTree(json); System.out.println(jsonNode.get("friends").get(0).toString());
它打印了数组friends
的第一个元素。而且只打印了一个,而不是两个。我认为json是“错误的”。您的friends
是这样的[ { {}, {} } ]
。 - KunLunJSON
负载有效。对象结构表示为一对花括号标记,围绕零个或多个名称/值对。名称是一个字符串。每个名称后面跟随一个单冒号标记,将名称与值分开。单逗号标记将值与以下名称分隔开。JSON语法不对用作名称的字符串施加任何限制,不要求名称字符串唯一,并且不分配任何名称/值对的顺序。来源 - Michał Ziober