好的,所以我用Jackson来解析一个JSON文件,问题是,该文件是一个大的未命名数组。它的格式为:
[ {json stuff}, {json stuff}, ..., {json stuff} ]
所有json stuff
都只是普通的JSON表达式,一旦我真正将它变成数组,我将不得不处理它。
我找不到任何关于如何使用Jackson映射事物的真实教程,但需要找到一种方法将这些不同的东西映射到一个数组中,然后使用Jackson将每个特定的东西解析为它的各个组件。知道怎么做吗?
P.S。我能找到的唯一真正的教程是:http://www.studytrails.com/java/json/java-jackson-Data-Binding.jsp
其中DataSet []是在文件中命名的数组。我想弄清楚如何做那个教程所做的事情,除了上面的例子,数组不以名字开头。
P.P.S。这是我正在使用的代码:
要映射到我的项目的基本杰克逊代码:
ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
URL url = null;
try {
url = new URL("my JSON URL");
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
ContactInfo contacts = mapper.readValue(url, ContactInfo.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
然后我的ContactInfo类只是Getters和Setters,其中包含JSON URL中定义的字段。问题是,没有分配所有不同JSON节点的Array的名称,我不知道如何访问单个联系人值,或者是否被覆盖。
答案 0 :(得分:2)
只需使用ContactInfo[]
作为类类型。这是一个有效的例子。
public class Example {
public static void main(String[] args) throws Exception {
String json = "[{\"name\":\"random\"},{\"name\":\"random\"},{\"name\":\"random\"}]";
ObjectMapper mapper = new ObjectMapper();
ContactInfo[] contactInfos = mapper.readValue(json, ContactInfo[].class);
System.out.println(contactInfos.length);
}
static class ContactInfo {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
或者,您可以使用List<ContactInfo>
,但您需要TypeReference
。
List<ContactInfo> contactInfos = mapper.readValue(json, new TypeReference<List<ContactInfo>>() {});
System.out.println(contactInfos.size());