使用 Jackson 反序列化,可以選擇
將JSON 專案陣列(任何性質:物件、數字、字串)反序列化為Java 陣列 String會很棒。
我看到這@JsonRawValue允許對嵌套欄位具有類似的功能。
是否可以為“頂級”物件實作相同的功能?
void test(){
var payload = """ [
{"a": 1, "b": "hello"},
{"a": 2, "b": "bye"},
"something"
]
""";
// What else is required to get the effect of @JsonRawValue ?
String[] rawItems = new ObjectMapper().readValue(payload, String[].class);
assertEquals("""{"a": 1, "b": "hello"}""", rawItems[0]);
assertEquals("""{"a": 2, "b": "bye"}""", rawItems[1]);
assertEquals("\"something\"", rawItems[2]);
}
uj5u.com熱心網友回復:
您可以將 轉換payload為com.fasterxml.jackson.databind.node.ArrayNode 然后遍歷元素(JsonNode在本例中)并將它們添加到 a List<String>(然后您可以String[]根據需要轉換為)。
需要注意的一件事 - 格式不會如您所愿。JsonNode有兩種方法 -toString()洗掉所有toPrettyString空格,并在最后添加空格和換行符String
String payload = """
[
{"a": 1, "b": "hello"},
{"a": 2, "b": "bye"},
"something"
]
""";
ArrayNode items = new ObjectMapper().readValue(payload, ArrayNode.class);
List<String> rawItemsList = new ArrayList<>();
for (JsonNode jsonNode : items) {
rawItemsList.add(jsonNode.toString());
}
// You can just keep using the rawItemsList, but I've converted it to array since the question mentioned it
String[] rawItemsArr = rawItemsList.toArray(new String[0]);
assertEquals("""
{"a":1,"b":"hello"}""", rawItemsArr[0]);
assertEquals("""
{"a":2,"b":"bye"}""", rawItemsArr[1]);
assertEquals("\"something\"", rawItemsArr[2]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367702.html
