用gson循环Json数组

use*_*513 17 java json

我试图解析一个jsonObject,似乎无法得到它,这是我得到的.

 json = (json data)
 JsonParser parser = new JsonParser();
 JsonObject rootObj = parser.parse(json).getAsJsonObject();
 JsonObject paymentsObject = rootObj.getAsJsonObject("payments");

 for(JsonObject pa : paymentsObject){
        String dateEntered = pa.getAsJsonObject().get("date_entered").toString();
    }
Run Code Online (Sandbox Code Playgroud)

但我得到一个不适用于键入我缺少的东西的foreach.我尝试了不同的方法,但似乎无法得到它.谢谢

JSON

 {
 "Name":"Test 2",
 "amountCollected":"1997",
 "payments":[
  {
     "quoteid":"96a064b9-3437-d536-fe12-56a9caf5d881",
     "date_entered":"2016-05-06 08:33:48",
     "amount":"1962",         
  },
  {
     "quoteid":"96a064b9-3437-d536-fe12-56a9caf5d881",
     "date_entered":"2016-05-06 08:33:08",
     "amount":"15",         
  },
  {
     "quoteid":"96a064b9-3437-d536-fe12-56a9caf5d881",
     "date_entered":"2016-05-06 03:19:08",
     "amount":"20",         
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

And*_*eas 40

现在,我们可以看到的数据,我们可以看到,payments 实际上是一个数组(值使用[]).

这意味着你需要调用rootObj.getAsJsonArray("payments")哪个返回a JsonArray,它是一个Iterable<JsonElement>,这意味着你的循环应该是for(JsonElement pa : paymentsObject).

请记住,数组的每个值都可以是任何类型的Json元素(对象,数组,字符串,数字......).

你知道他们是JsonObject,所以你可以打电话getAsJsonObject()给他们.

json = (json data)
JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(json).getAsJsonObject();
JsonArray paymentsArray = rootObj.getAsJsonArray("payments");
for (JsonElement pa : paymentsArray) {
    JsonObject paymentObj = pa.getAsJsonObject();
    String     quoteid     = paymentObj.get("quoteid").getAsString();
    String     dateEntered = paymentObj.get("date_entered").getAsString();
    BigDecimal amount      = paymentObj.get("amount").getAsBigDecimal();
}
Run Code Online (Sandbox Code Playgroud)