2017-08-01 48 views
0

我的JSON字符串是:如何通過JSON數據迭代與GSON

{ 
    "recordsTotal":1331, 
    "data":[ 
     { 
     "part_number":"3DFN64G08VS8695 MS", 
     "part_type":"NAND Flash", 
     "id":1154, 
     "manufacturers":[ 
      "3D-Plus" 
     ] 
     }, 
     { 
     "part_number":"3DPM0168-2", 
     "part_type":"System in a Package (SiP)", 
     "id":452, 
     "manufacturers":[ 
      "3D-Plus" 
     ] 
     }, 
     { 
     "part_number":"3DSD1G16VS2620 SS", 
     "part_type":"SDRAM", 
     "id":269, 
     "manufacturers":[ 
      "3D-Plus" 
     ] 
     } 
    ] 
} 

此代碼讓我獲得兩個最高級別的元素:

JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject(); 
System.out.println("data : " + jsonObject.get("data")); 
System.out.println("recordsTotal : " + jsonObject.get("recordsTotal")); 

但我想要做的是遍歷「data」中的所有對象並創建part_numbers的列表。我怎麼做?

回答

1

JsonArray is an Iterable<JsonElement>。所以你可以使用循環。

JsonObject jsonObject = new JsonParser().parse(jsonString).getAsJsonObject(); 
final JsonArray data = jsonObject.getAsJsonArray("data"); 
System.out.println("data : " + data); 
System.out.println("recordsTotal : " + jsonObject.get("recordsTotal")); 
List<String> list = new ArrayList<String>(); 
for (JsonElement element : data) { 
    list.add(((JsonObject) element).get("part_number").getAsString()); 

} 
0

給定的代碼不能保證等於100%,但它會幫助你工作。

首先,你必須創建一個類爲您的數據對象:

class mydata { 
    public String part_name; 
    public String part_type; 
    public int Id; 
    public String manufacturers; 
} 

你的主要方法應該看起來像

public static void main(String[] args) { 

JSONObject obj = new JSONObject(); 
List<mydata> sList = new ArrayList<mydata>(); 

mydata obj1 = new mydata(); 
obj1.setValue("val1"); 
sList.add(obj1); 

mydata obj2 = new mydata(); 
obj2.setValue("val2"); 
sList.add(obj2); 

obj.put("list", sList); 

JSONArray jArray = obj.getJSONArray("list"); 
for(int ii=0; ii < jArray.length(); ii++) 
    System.out.println(jArray.getJSONObject(ii).getString("value")); 
    } 

獲得進一步的探索,你可以使用這個鏈接: https://gist.github.com/codebutler/2339666

0

假設Json Model的類名是Example。

import com.google.gson.annotations.SerializedName; 
import java.util.List; 
public class Example { 

    @SerializedName("recordsTotal") 
    private Integer recordsTotal; 
    @SerializedName("data") 
    private List<Datum> data = null; 

    public Integer getRecordsTotal() { 
     return recordsTotal; 
    } 

    public void setRecordsTotal(Integer recordsTotal) { 
     this.recordsTotal = recordsTotal; 
    } 

    public List<Datum> getData() { 
     return data; 
    } 

    public void setData(List<Datum> data) { 
     this.data = data; 
    } 

} 

和數據類名的假設名單是基準: -

import com.google.gson.annotations.SerializedName; 
import java.util.List; 
public class Datum { 

    @SerializedName("part_number") 

    private String partNumber; 
    @SerializedName("part_type") 

    private String partType; 
    @SerializedName("id") 

    private Integer id; 
    @SerializedName("manufacturers") 

    private List<String> manufacturers = null; 

    public String getPartNumber() { 
     return partNumber; 
    } 

    public void setPartNumber(String partNumber) { 
     this.partNumber = partNumber; 
    } 

    public String getPartType() { 
     return partType; 
    } 

    public void setPartType(String partType) { 
     this.partType = partType; 
    } 

    public Integer getId() { 
     return id; 
    } 

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

    public List<String> getManufacturers() { 
     return manufacturers; 
    } 

    public void setManufacturers(List<String> manufacturers) { 
     this.manufacturers = manufacturers; 
    } 

} 

然後通過GSON庫,我們可以JSON轉換爲Java模型:

Example example = new Gson().fromJson(jsonString, new TypeToken<Example>() {}.getType()); 

現在我們可以列表數據雖然是示例模型: -

List<Datum> dataList = example.getData(); 

從dataList中可以遍歷並獲取所有信息。

如果partNmber列表,我們需要那麼我們就可以通過這種方式獲得: -

List<String> partNumberList = new ArrayList<>(); 
for (Datum data : dataList) { 
     partNumberList.add(data.getPartNumber()); 
    }