2016-02-11 95 views
0

我有此JSON嘗試使用傑克遜流API

[{ 
    "id":"1", 
    "firstname":"X", 
    "lastname":"y", 
    "contactnumbers":["905123123"] 
},{ 
    "id":"2", 
    "firstname":"Jo", 
    "lastname":"Be", 
    "contactnumbers":["416888888", "951233333"] 
}] 

,我試圖用下面的代碼

if (jsonParser.nextToken() == JsonToken.START_ARRAY){ 
     if (jsonParser.nextToken() == JsonToken.START_OBJECT){ 
      c = new Person(); 
      while (jsonParser.nextToken() != JsonToken.END_OBJECT){ 
       if (jsonParser.getCurrentName().equals("id")){ 
        c.setId(jsonParser.getValueAsString()); 
        jsonParser.nextToken(); 
       } else if (jsonParser.getCurrentName().equals("firstname")){ 
        c.setFirstName(jsonParser.getValueAsString()); 
        jsonParser.nextToken(); 
       } else if (jsonParser.getCurrentName().equals("lastname")){ 
        c.setLastName(jsonParser.getValueAsString()); 
        jsonParser.nextToken(); 
       } else if (jsonParser.getCurrentName().equals("contactnumbers")){ 
        List<String> s = new ArrayList<String>(); 
        while (jsonParser.nextToken() != JsonToken.END_ARRAY){ 
         s.add(jsonParser.nextValue().asString()); 
        } 
       } 
      } 
     } 
     if (c != null) { 
      personList.add(c); 
     } 
    } 

解析它,但顯然,連我最if是不是被解析JSON執行。我不知道爲什麼。

+1

由於不執行最外層的情況下,有可能問題出在代碼之前。請添加此代碼。既然你是一個有經驗的用戶,我假設你檢查了相關的對象不是空的或任何...(但它會幫助注意) –

+0

我已將parser.nextToken()設置爲「watch」在我的IDE中。出於這個原因,最外層的條件沒有被執行。這已被刪除。現在我只是在努力解決它:正在努力掙扎 –

回答

0

不是很好的代碼,但它的工作原理。

Person.java:

package org.jackson.example; 

import java.sql.Date; 
import java.util.List; 

public class Person { 

    private String id; 

    private String firstName; 

    private String lastName; 

    private List<String> contactNumbers; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public List<String> getContactNumbers() { 
     return contactNumbers; 
    } 

    public void setContactNumbers(List<String> contactNumbers) { 
     this.contactNumbers = contactNumbers; 
    } 

    @Override 
    public String toString() { 
     return "Person [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", contactNumbers=" 
       + contactNumbers + "]"; 
    } 

} 

StreamJacksonApi.java:

package org.jackson.example; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import com.fasterxml.jackson.core.JsonFactory; 
import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.core.JsonParser; 
import com.fasterxml.jackson.core.JsonToken; 

public class StreamJacksonApi { 

    public static void main(String[] args) throws JsonParseException, IOException { 
     List<Person> personList = new ArrayList<>(); 

     String content = "[{ \"id\":\"1\", \"firstname\":\"X\", \"lastname\":\"y\", \"contactnumbers\":[\"905123123\"] },{ \"id\":\"2\", \"firstname\":\"Jo\", \"lastname\":\"Be\", \"contactnumbers\":[\"416888888\", \"951233333\"] }]"; 
     JsonFactory jsonFactory = new JsonFactory(); 
     @SuppressWarnings("deprecation") 
     JsonParser jsonParser = jsonFactory.createJsonParser(content); //Omit deprecation 
     jsonParser.nextToken(); 
     while (jsonParser.nextToken() != JsonToken.END_ARRAY){ 
       final Person c = new Person(); 
       while (jsonParser.nextToken() != JsonToken.END_OBJECT){ 
        if (jsonParser.getCurrentName().equals("id")){ 
         c.setId(jsonParser.getValueAsString()); 
        } else if (jsonParser.getCurrentName().equals("firstname")){ 
         c.setFirstName(jsonParser.getValueAsString()); 
        } else if (jsonParser.getCurrentName().equals("lastname")){ 
         c.setLastName(jsonParser.getValueAsString()); 
        } else if (jsonParser.getCurrentName().equals("contactnumbers")){ 
         List<String> s = new ArrayList<String>(); 
         while (jsonParser.nextToken() != JsonToken.END_ARRAY){ 
          final String token = jsonParser.getValueAsString(); 
          if(token != null) { 
           s.add(token); 
          } 
         } 
         c.setContactNumbers(s); 
        } 
       } 
       if (c != null) { 
        personList.add(c); 
       } 
      } 

     for (Person person : personList) { 
      System.out.println(person); 
     } 
    } 


} 

看也JacksonStreamingApi