我收到以下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));
}
}