2015-06-08 33 views
5

aşağıdaki dize sunucuya geçti:GSON: Değil bir JSON nesnesi

Ben organları dizi alan almak istiyorum http://jsonlint.com/

için geçerli bir json olan

{ 
    "productId": "", 
    "sellPrice": "", 
    "buyPrice": "", 
    "quantity": "", 
    "bodies": [ 
     { 
      "productId": "1", 
      "sellPrice": "5", 
      "buyPrice": "2", 
      "quantity": "5" 
     }, 
     { 
      "productId": "2", 
      "sellPrice": "3", 
      "buyPrice": "1", 
      "quantity": "1" 
     } 
    ] 
} 

.

Ben bunu yapıyorum nasıl:

Gson gson = new Gson(); 
JsonObject object = gson.toJsonTree(value).getAsJsonObject(); 
JsonArray jsonBodies = object.get("bodies").getAsJsonArray(); 

Ama istisna alıyorum ikinci satırda

aşağıda listelenmiştir:

HTTP Status 500 - Not a JSON Object: "{\"productId\":\"\",\"sellPrice\":\"\",\"buyPrice\":\"\",\"quantity\":\"\",\"bodies\":[{\"productId\":\"1\",\"sellPrice\":\"5\",\"buyPrice\":\"2\",\"quantity\":\"5\"},{\"productId\":\"2\",\"sellPrice\":\"3\",\"buyPrice\":\"1\",\"quantity\":\"1\"}]}" 

Nasıl düzgün sonra bunu yapmak için?

+1

Bu http://stackoverflow.com/a/15116323/2044733 adresine göz atmak isteyebilirsiniz. "JsonObject'ü kullanmak için" başlığındaki ikinci seçenek, tam olarak istediğiniz gibi görünür. – bbill

cevap

4

https://stackoverflow.com/a/15116323/2044733'da açıklandığı gibi parse yöntemini kullandım ve işe yaradı.

gerçek kod bunu sizin toJsonTree nesne doğru türde değil mi düşünüyor nerede hata tarif yaşamaya devam edip gibi görünüyor the docs itibaren

JsonParser jsonParser = new JsonParser(); 
jsonParser.parse(json).getAsJsonObject(); 

gibi görünecektir. Burada başka bir cevap ve bağlantılı iş parçacığı üzerinde belirtildiği gibi

Yukarıdaki kod

JsonObject jelem = gson.fromJson(json, JsonElement.class); 

eşdeğerdir.

+1

evet, çözümünüz benim için çalıştı! – marknorkin

8

Gson#toJsonTree javadoc Bu yöntem JsonElement s ağaç olarak eşdeğer temsiline belirtilen nesneyi serializes

belirtmektedir. olduğu

, temelde

String jsonRepresentation = gson.toJson(someString); 
JsonElement object = gson.fromJson(jsonRepresentation, JsonElement.class); 

Bir Java String yani bir JSON dize, dönüştürülür yapar. JsonPrimitive, JsonObject değil. Diğer bir deyişle, toJsonTree, bir JSON dizesi olarak değil, bir JSON nesnesi olarak geçirdiğiniz String değerinin içeriğini yorumlamaktadır.

Sen senin String bir JsonObject dönüştürmek için doğrudan

JsonObject object = gson.fromJson(value, JsonObject.class); 

kullanmalıdır.

-1

Ne hakkında JsonArray jsonBodies = object.getAsJsonArray ("bodies");

+0

Bu değişiklik istisnayı dikkate alarak ne olacak? GetAsJsonObject'? –