2016-08-11 38 views
0

我有一個JSON數組,裏面有數組。我如何解析這個使用Json.simple。使用JSON獲取包含JSON的列表的對象列表。簡單

JSON對象例如:

[ 
    { 
     "ID":"1", 
     "Objects":[ 
     { 
      "ObjectID":"5" 
     }, 
     { 
      "ObjectID":"9" 
     } 
     ] 
    }, 
    { 
     "ID":"2", 
     "Objects":[ 
     { 
      "ObjectID":"99" 
     }, 
     { 
      "ObjectID":"11" 
     } 
     ] 
    } 
] 

類Foo

public int ID; 
public List<Obj> Objects; 

類的OBJ

public int ObjectID; 

,所以我想富的清單,但在foo中的對象需要填補的well

因此w帽子我需要的是:

List<Foo> foos = .... the output from the JSON 
+0

檢查:http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java – beeb

+0

你想在列表中選擇哪些元素?那些只在最上面的陣列? –

+0

@joey不幸的是,現在tt對我來說還不太清楚。 –

回答

0

有以下類別:

public class Foo { 

    private int id; 
    private List<Obj> objects; 

    // Getters and setters ommited 
} 
public class Obj { 

    private int objectID; 

    // Getters and setters ommited  
} 

使用這段代碼來解析您的JSON:

String json = "[{\"ID\":\"1\",\"Objects\":[{\"ObjectID\":\"5\"},{\"ObjectID\":\"9\"}]},{\"ID\":\"2\",\"Objects\":[{\"ObjectID\":\"99\"},{\"ObjectID\":\"11\"}]}]"; 
JSONParser parser = new JSONParser(); 
List<Foo> foos = parseFooArray((JSONArray) parser.parse(json)); 

這就是神奇發生了:

private List<Foo> parseFooArray(JSONArray array) { 

    List<Foo> list = new ArrayList<>(); 

    for (Object item : array) { 
     JSONObject object = (JSONObject) item; 
     Foo foo = new Foo(); 
     foo.setId(Integer.valueOf((String) object.get("ID"))); 
     foo.setObjects(parseObjectArray((JSONArray) object.get("Objects"))); 
     list.add(foo); 
    } 

    return list; 
} 
private List<Obj> parseObjectArray(JSONArray array) { 

    List<Obj> list = new ArrayList<>(); 

    for (Object item : array) { 
     JSONObject object = (JSONObject) item; 
     Obj obj = new Obj(); 
     obj.setObjectID(Integer.valueOf((String) object.get("ObjectID"))); 
     list.add(obj); 
    } 

    return list; 
} 
0

我已經寫了演示代碼對你來說,使用jackson.databind您可以分析如下代碼:

package test; 

    import java.io.IOException; 

    import com.fasterxml.jackson.core.JsonParseException; 
    import com.fasterxml.jackson.databind.JsonMappingException; 
    import com.fasterxml.jackson.databind.ObjectMapper; 

    public class jsonParsing { 
     public static void main(String args[]){ 
      String jsonString = 
         "{" 
         +"\"ID\":\"1\"," 
         +"\"Objects\":[" 
          +"{" 
          +"\"ObjectID\":\"5\"" 
          + "}," 
          + "{" 
           +"\"ObjectID\":\"9\"" 
          + "}" 
         +"]" 
         + "}"; 


     System.out.println("Print ObjectID from --- "+jsonString); 


     try{ 
      ObjectMapper mapper = new ObjectMapper(); 
      JsonMapper jm = mapper.readValue(jsonString.toString(), JsonMapper.class); 
      System.out.println("ID is :"+jm.getId()); 
      for(JsonSubMapper jsm : jm.getObjects()){ 
       System.out.println("ObjectID is :"+jsm.getObjectID()); 
      } 
     }catch(JsonMappingException jme){ 
      jme.printStackTrace(); 
     }catch(JsonParseException jpe){ 
      jpe.printStackTrace(); 
     }catch(IOException io){ 
      io.printStackTrace(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     }   
     } 
    } 

package test; 

import java.util.ArrayList; 
import java.util.List; 
import javax.annotation.Generated; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@Generated("org.jsonschema2pojo") 
@JsonPropertyOrder({ "ID", "Objects"}) 

public class JsonMapper { 

    @JsonProperty("ID") 
    private String id; 

    @JsonProperty("Objects") 
    private List<JsonSubMapper> objects = new ArrayList<JsonSubMapper>();; 

    public String getId() { 
     return id; 
    } 

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

    public List<JsonSubMapper> getObjects() { 
     return objects; 
    } 

    public void setObjects(List<JsonSubMapper> objects) { 
     this.objects = objects; 
    } 

} 

    package test; 
    import javax.annotation.Generated; 
    import com.fasterxml.jackson.annotation.JsonInclude; 
    import com.fasterxml.jackson.annotation.JsonProperty; 
    import com.fasterxml.jackson.annotation.JsonPropertyOrder; 
    @JsonInclude(JsonInclude.Include.NON_NULL) 
    @Generated("org.jsonschema2pojo") 
    @JsonPropertyOrder({ "ObjectID"}) 

    public class JsonSubMapper { 

     @JsonProperty("ObjectID") 
     private String objectID; 

     public String getObjectID() { 
      return objectID; 
     } 

     public void setObjectID(String objectID) { 
      this.objectID = objectID; 
     } 

    } 

輸出:

Print ObjectID from --- {"ID":"1","Objects":[{"ObjectID":"5"},{"ObjectID":"9"}]} 
ID is :1 
ObjectID is :5 
ObjectID is :9