2016-05-25 19 views
4

私はjsonObjectを解析しようとしていますが、取得できないようですが、ここに私が持っているものがあります。gsonのループJson配列

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(); 
    } 

しかし、私は何をしないのです入力には適用できないの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",   
    } 
] 
} 
+2

'JsonObject'は' Iterable'ではありません。そのため、 'for'ループのような拡張されたループでは使用できません。おそらく、あなたが解析しようとしているJsonデータの例を共有していたなら、私たちはあなたを助けることができます。あなたは 'payments'の値が配列ではなくオブジェクトであると確信していますか?たぶん、あなたは 'rootObj.getAsJsonArray(" payments ")'を呼んでいたはずです。返される 'JsonArray' *は* iterableです。 – Andreas

+0

私はこれを試してみましたが、com.google.gson.JsonObjectをcom.google.gson.JsonArrayにキャストすることはできません – user1054513

+0

更新された質問 – user1054513

答えて

12

今、私たちはデータを見ることができることを、我々はpaymentsが実際に配列(値が[]を使用しています)であることがわかります。あなたはJsonArray返しrootObj.getAsJsonArray("payments")を呼び出す必要があり、それはあなたのループがfor(JsonElement pa : paymentsObject)でなければならない意味Iterable<JsonElement>、ある意味

配列の各値には、任意のタイプの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(); 
} 
+0

あなたは正しいです、私は時々私の支払いは、単一の値がエラーを引き起こしている配列ではないオブジェクトであることに気づいた。あなたのお手伝いをしてくれてありがとう。 – user1054513

関連する問題