使用Gson解析包含动态字段的json

时间:2015-12-03 12:12:19

标签: android json gson

我有一个这样的模型:

class MyModel{
    String id;
    String name;
    String field;

   //Getters and setters
}

我正在使用Gson使用以下代码解析json

// Returns the json containing list of objects
// with properties supplied to the method
String response = getResponse(new String[] { "id", "name", "value",
  {A variable field whose value is determined at runtime}});
MyModel obj = new Gson().fromJson(response,
    new TypeToken<List<MyModel>>() {}.getType());

该代码适用于3个预定义字段。有一个第四个字段,其名称是变量(在运行时确定),我无法在模型中创建硬编码字段,因为该字段未修复。如何解析一个场是动态的json?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下选项:

  • Gson 2.5支持同一变量的多个字段名称。如果在运行时确定该值但该值的集合是有限的,那么您可以执行以下操作:

    @SerializedName(value="name1", alternate={"name2", "name3"}) String b;
    
  • 创建自定义反序列化器:

    public static class YourModelDeserializer implements JsonDeserializer<YourModel> {
        @Override
        public YourModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
            throws JsonParseException
        {
            /* Deserialize here */;
        }
    }
    

答案 1 :(得分:0)

您可以通过以下代码获取所有关键名称:

JSONObject jsonObject = new JSONObject(response);
Iterator keys = jsonObject.keys();

 while(keys.hasNext()) {
       String dynamicKey = (String)keys.next();
       JSONObject currentDynamicValue = jsonObject.getJSONObject(dynamicKey);
  }

您可以使用ArrayListArray保存所有密钥名称。