[英]How to define this JSON as a JAVA Object
我收到以下 JSON:
[
669124,
[
[
40135,
5,
0.68395602
],
[
40134,
1,
0.03737
]
]
]
我怎樣才能把它變成 JAVA Object?
怎么樣...
public class Outer {
private int field1;
private List<Inner> field2;
}
public class Inner {
private int field1;
private int field2;
private double field3;
}
然后你只是解析 json 並將它們讀入這些類?
這個特定的 JSON 的問題在於它是一個不同類型的列表。 第一個元素是數字 (int),第二個是二維數字數組,一些是整數,一些是雙精度數。
因此,如果您嘗試將其解析為自定義 Java object,您最多只能得到List<Object>
,或者只是Object
。
我相信您想將其解析為 JSON 樹。 有幾個庫,Jackson 是目前最受歡迎的。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
public class JsonTest {
String JSON = "[\n" +
" 669124,\n" +
" [\n" +
" [\n" +
" 40135,\n" +
" 5,\n" +
" 0.68395602\n" +
" ],\n" +
" [\n" +
" 40134,\n" +
" 1,\n" +
" 0.03737\n" +
" ]\n" +
" ]\n" +
"]";
@Test
public void testJson() throws JsonProcessingException {
ObjectMapper om = new ObjectMapper();
JsonNode doc = om.readTree(JSON);
assertThat(doc.isArray(), is(true));
JsonNode element1 = doc.get(0);
assertThat(element1.isInt(), is(true));
assertThat(element1.asInt(), is(669124));
JsonNode element2 = doc.get(1);
assertThat(element2.isArray(), is(true));
assertThat(element2.get(0).get(0).intValue(), is(40135));
assertThat(element2.get(0).get(1).intValue(), is(5));
assertThat(element2.get(0).get(2).doubleValue(), is(0.68395602));
assertThat(element2.get(1).get(0).intValue(), is(40134));
assertThat(element2.get(1).get(1).intValue(), is(1));
assertThat(element2.get(1).get(2).doubleValue(), is(0.03737));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.