2014-03-06 75 views
1

好吧,所以我使用杰克逊解析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类只是getter和setter与在JSON URL的定义字段。问题是,如果没有名称来分解所有不同的JSON节点,我不知道如何访问各个联系人值,或者它们是否被覆盖。

+0

只要使用'List '或'Whatever []'。 –

+0

你有什么代码可以发布你到目前为止尝试过的吗? –

+0

刚加入。 编辑:使用列表给出类型不匹配,与ContactInto []一样。 –

回答

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()); 
+0

明白了,仍然在学习杰克逊,今天刚刚开始,那里的教程严重缺乏。谢谢您的帮助! –