2016-07-18 50 views
0

有沒有一種方法可以使用Gson來將這樣的JSON響應解析到下面的模型類中?如何使用Gson將動態對象解析爲JSONObject

{ 
    "id": 123, 
    "phone": "123456789", 
    "config": { 
        "dynamicKey1": "true", 
        "dynamicKey2": "123" 
    } 
} 

模型類:

public class User { 
    int id; 
    String phone; 
    JSONObject config; 
} 

config對象中的鍵可以或可以不存在。 反序列化後,我希望能夠查詢動態使用的東西的配置鍵,如user.getConfig().optBoolean("dynamicKey1")

回答

0

我最終什麼了做是使用com.google.gson.JsonObject而不是org.json.JSONObject。從GSON使用JsonObject,反序列化的工作完美,並訪問動態密鑰看起來是這樣的:

user.getConfig().getAsJsonPrimitive("dynamicKey1").getAsBoolean() 
0

用戶配置:

public class User { 

int id; 
String phone; 
Map<String, String> config; 
public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getPhone() { 
    return phone; 
} 
public void setPhone(String phone) { 
    this.phone = phone; 
} 
public Map<String, String> getConfig() { 
    return config; 
} 
public void setConfig(Map<String, String> config) { 
    this.config = config; 
} 

} 

主類:

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String input = "{\"id\": 123,\"phone\": \"123456789\",\"config\": {\"dynamicKey1\": \"true\",\"dynamicKey2\": \"123\"}}"; 

    Gson gsonInstance = null; 

    gsonInstance = new GsonBuilder().create(); 

    User user = gsonInstance.fromJson(input, User.class); 

    boolean value = Boolean.parseBoolean(user.getConfig().get("dynamicKey1")); 
    System.out.println(value); 
} 

您可以創建一個DynamicKeys在Config部分中的映射,然後在需要時轉換爲相應的基本類型。

希望它有幫助。