如何将此JSON定义为JAVA对象



我收到以下JSON:

[
669124,
[
[
40135,
5,
0.68395602
],
[
40134,
1,
0.03737
]
]
]

如何将其转换为JAVA对象?

怎么样。。。

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(,第二个是一个二维数字数组,有些是int,有些是double。

因此,如果您尝试将其解析为一个自定义Java对象,您最多只能得到List<Object>,或者只得到Object

我相信您希望将其解析为JSON树。有几个图书馆,杰克逊是迄今为止最受欢迎的。

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.68395602n" +
"        ],n" +
"        [n" +
"            40134,n" +
"            1,n" +
"            0.03737n" +
"        ]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));
}
}

最新更新