Tôi mới bắt đầu sử dụng thư viện JSON JSON. Jackson là một thư viện rất mạnh, nhưng nó có một API rộng lớn khủng khiếp. Rất nhiều thứ có thể được thực hiện theo nhiều cách. Điều này khiến bạn khó tìm đường đến Jackson - làm thế nào để biết cách làm đúng/tốt nhất là gì?readValue và readTree ở Jackson: khi nào nên sử dụng?
Tại sao tôi sẽ sử dụng giải pháp này:
String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(json, JsonNode.class);
if (node.isObject()) {
ObjectNode obj = mapper.convertValue(node, ObjectNode.class);
if (obj.has("a")) {
System.out.println("a=" + obj.get("a").asDouble());
}
}
Hơn một giải pháp như thế này:
String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
if (node.isObject()) {
ObjectNode obj = (ObjectNode) node;
if (obj.has("a")) {
System.out.println("a=" + obj.get("a").asDouble());
}
}
Hoặc qua các giải pháp mà tôi đi qua sử dụng JsonFactory và JsonParser và các tùy chọn thậm chí có thể nhiều hơn nữa ...
Có vẻ như mee rằng mapper.readValue là phổ biến nhất và có thể được sử dụng trong nhiều trường hợp: đọc tới JsonNode, ObjectNode, ArrayNode, PoJo, v.v. Vậy tại sao tôi muốn chúng tôi e mapper.readTree?
Và cách tốt nhất để chuyển đổi một JsonNode thành một ObjectNode là gì? Chỉ cần truyền tới ObjectNode? Hoặc sử dụng một cái gì đó như mapper.convertValue?
cảm ơn, đây là thông tin hữu ích. Tôi giả định rằng convertValue đủ thông minh để chỉ đưa vào đúng loại khi có thể và nó sẽ an toàn hơn là tự đúc mình ... –
Đó là một ý tưởng thú vị - có lẽ mã đó có thể được thêm vào? Tên 'chuyển đổi' có nghĩa là chuyển tải chuyển đổi; không chỉ đơn giản là diễn xuất, nhưng tôi đoán đó không phải là kỳ vọng vô lý. Tôi sẽ gửi một vấn đề cải tiến cho việc này. – StaxMan