使用Jackson解析和未命名的数组

时间:2014-03-06 18:28:11

标签: java json jackson

好的,所以我用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的名称,我不知道如何访问单个联系人值,或者是否被覆盖。

1 个答案:

答案 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());