gpt4 book ai didi

java - 无法将数组的 JSON 数组解析为 Jackson 中的 LinkedHashMap

转载 作者:太空狗 更新时间:2023-10-29 15:47:20 25 4
gpt4 key购买 nike

我正在开发 Android REST 客户端。我们使用 JSON 作为数据交换格式,所以我使用 Jackson 解析器。我从服务器得到不同的 Json 响应,比如简单的数组:

{"user_id":"332","user_role":"1"} 

或者别的什么。我将所有这些东西解析为 LinkedHashMap<String, Object>一切正常,但是当我从服务器收到此响应时:

[ { "user_id":"352",
"user_role":"expert",
"name":"Test 12-18",
"description":"Test" },

{ "user_id":"263",
"user_role":"novice lab",
"name":"Tom's Desk",
"description":"Desk"}
]

解析后我得到了 null: {}。这是我使用 Jackson 的代码:

 ObjectMapper mapParametersToJSON = new ObjectMapper();
String serverResponseBody = responseFromServer.getBody();
LinkedHashMap<String, Object> resultofOperation = new LinkedHashMap<String,
Object>();
TypeReference<LinkedHashMap<String,Object>> genericTypeReferenceInformation = new
TypeReference<LinkedHashMap<String,Object>>() {};
try {
resultofOperation = mapParametersToJSON.readValue(serverResponseBody,
genericTypeReferenceInformation);

那么,为什么 Jackson 无法解析它?我该如何解决这个问题?

最佳答案

其他人提出了这个问题,但解决方案有点不完整。如果您需要处理 JSON 对象和数组,您可以绑定(bind)到 java.lang.Object,检查类型:

Object stuff = objectMapper.readValue(json, Object.class);

您将获得 ListMap(具体来说,默认为 ArrayListLinkedHashMap;这些默认值可以更改)。

或者你可以用 JsonNode 做 JSON 树:

JsonNode root = objectMapper.readTree(json);
if (root.isObject()) { // JSON Object
} else if (root.isArray()) { ...
}

后者通常更方便。

一件好事是您仍然可以从中创建常规的 POJO,例如:

如果 (root.isObject()) { MyObject ob = objectMapper.treeToValue(MyObject.class); } //或者对于 Object,使用 objectMapper.convertValue(ob, MyObject.class)

因此您甚至可以对不同的类型进行不同的处理;来回不同的表示。

关于java - 无法将数组的 JSON 数组解析为 Jackson 中的 LinkedHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366224/

25 4 0
文章推荐: c - 不同类型指针之间的减法
文章推荐: javascript - dom 或 html 文档中理想的 id 数量
文章推荐: javascript - HTML:通过 JavaScript 添加