2012-09-10 109 views
3
[{"body":"{\"id\":\"act_105099966308460\",\"account_id\":105099966308460,\"name\":\"\",\"account_status\":2,\"currency\":\"USD\",\"timezone_id\":1,\"timezone_name\":\"America\\\/Los_Angeles\",\"timezone_offset_hours_utc\":-7,\"is_personal\":0,\"business_name\":\"\",\"business_street\":\"44916 
Winding 
Lane\",\"business_street2\":\"\",\"business_city\":\"Fremont\",\"business_state\":\"CA\",\"business_zip\":\"94539\",\"business_country_code\":\"US\",\"vat_status\":0,\"daily_spend_limit\":25000,\"users\":[{\"uid\":100004253709632,\"permissions\":[1,2,3,4,5,7],\"role\":1001}],\"notification_settings\":{\"100004253709632\":{\"1000\":{\"1\":1},\"1001\":{\"1\":1},\"1002\":{\"1\":1,\"2\":60},\"1003\":{\"1\":1,\"2\":60},\"1004\":{\"1\":1},\"1005\":{\"1\":1},\"1006\":{\"1\":1},\"1009\":{\"1\":1},\"1010\":{\"1\":1},\"1011\":{\"1\":1},\"2000\":{\"1\":1,\"2\":60},\"2001\":{\"1\":1,\"2\":60},\"2002\":{\"2\":60},\"2003\":{\"1\":1,\"2\":60},\"2004\":{\"1\":1,\"2\":60},\"2005\":{\"1\":1,\"2\":60},\"3000\":{\"1\":1,\"2\":60},\"3001\":{\"1\":1,\"2\":60},\"3002\":{\"2\":60},\"3003\":{\"2\":60},\"5000\":{\"1\":1},\"6000\":{\"1\":1},\"6001\":{\"1\":1},\"9000\":{\"1\":1,\"2\":60},\"8000\":{\"1\":1,\"2\":60}}},\"account_groups\":[{\"account_group_id\":344615332296926,\"name\":\"my 
test 
group\",\"status\":1},{\"account_group_id\":218621204934411,\"name\":\"inmobi 
Ads 
group\",\"status\":1},{\"account_group_id\":267052626739836,\"name\":\"Test 
ad account 
group1\",\"status\":1}],\"capabilities\":[2],\"balance\":0,\"moo_default_conversion_bid\":1000,\"amount_spent\":0}"}] 

我想解析這個字符串作爲對象,但它是失敗的。 POJO和代碼我使用:使用Gson解析嵌套的json字符串

Type listType = new TypeToken<List<BatchAccounts>>(){}.getType(); 

Gson gson = new Gson(); 

List<BatchAccounts> results = gson.fromJson(response1, listType); 

public class BatchAccounts 
{ 
    private Account body; 

    public Account getBody() 
    { 
     return body; 
    } 

} 


public class Account 
{ 

    private String id; 

    private String account_id; 

    public String getId() 
    { 
     return id; 
    } 

    public String getAccount_id() 
    { 
     return account_id; 
    } 

} 

例外:

Exception in thread "main" com.google.gson.JsonParseException: Expecting object found: "{\"id\":\"act_105099966308460\",\"account_id\":105099966308460,\"name\":\"\",\"account_status\":2,\"currency\":\"USD\",\"timezone_id\":1,\"timezone_name\":\"America\\/Los_Angeles\",\"timezone_offset_hours_utc\":-7,\"is_personal\":0,\"business_name\":\"\",\"business_street\":\"44916 Winding Lane\",\"business_street2\":\"\",\"business_city\":\"Fremont\",\"business_state\":\"CA\",\"business_zip\":\"94539\",\"business_country_code\":\"US\",\"vat_status\":0,\"daily_spend_limit\":25000,\"users\":[{\"uid\":100004253709632,\"permissions\":[1,2,3,4,5,7],\"role\":1001}],\"notification_settings\":{\"100004253709632\":{\"1000\":{\"1\":1},\"1001\":{\"1\":1},\"1002\":{\"1\":1,\"2\":60},\"1003\":{\"1\":1,\"2\":60},\"1004\":{\"1\":1},\"1005\":{\"1\":1},\"1006\":{\"1\":1},\"1009\":{\"1\":1},\"1010\":{\"1\":1},\"1011\":{\"1\":1},\"2000\":{\"1\":1,\"2\":60},\"2001\":{\"1\":1,\"2\":60},\"2002\":{\"2\":60},\"2003\":{\"1\":1,\"2\":60},\"2004\":{\"1\":1,\"2\":60},\"2005\":{\"1\":1,\"2\":60},\"3000\":{\"1\":1,\"2\":60},\"3001\":{\"1\":1,\"2\":60},\"3002\":{\"2\":60},\"3003\":{\"2\":60},\"5000\":{\"1\":1},\"6000\":{\"1\":1},\"6001\":{\"1\":1},\"9000\":{\"1\":1,\"2\":60},\"8000\":{\"1\":1,\"2\":60}}},\"account_groups\":[{\"account_group_id\":344615332296926,\"name\":\"my test group\",\"status\":1},{\"account_group_id\":218621204934411,\"name\":\"inmobi Ads group\",\"status\":1},{\"account_group_id\":267052626739836,\"name\":\"Test ad account group1\",\"status\":1}],\"capabilities\":[2],\"balance\":0,\"moo_default_conversion_bid\":1000,\"amount_spent\":0}" 
    at com.google.gson.JsonObjectDeserializationVisitor.visitFieldUsingCustomHandler(JsonObjectDeserializationVisitor.java:100) 
    at com.google.gson.ReflectingFieldNavigator.visitFieldsReflectively(ReflectingFieldNavigator.java:63) 
    at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:120)
+1

所有這些引號*是否應該被轉義? –

+0

請參閱http://stackoverflow.com/questions/3458930/deserializing-json-array-using-gson – Ruwantha

回答

0

既然你有嵌套在另一個JSON對象內部JSON字符串,你需要兩個解析步驟解析這個結構是這樣的:

Gson gson = new Gson(); 

List<BodyHolder> bodies = gson.fromJson(response1, 
    new TypeToken<List<BodyHolder>>() {}.getType()); 

List<BatchAccounts> result = new ArrayList<BatchAccounts>(bodies.size()); 
for (BodyHolder holder: bodies) { 
    BatchAccounts a = new BatchAccounts(); 
    a.setBody(gson.fromJson(holder.getBody(), Account.class); 
    result.add(a); 
} 

public class BodyHolder 
{ 
    private String body; 
    ...  
} 

此外,您可以實施第二步作爲自定義JsonDeserializer