使用可变结构GSON反序列化JSON对象

时间:2016-09-02 19:24:26

标签: json gson

我正在尝试使用GSON使用以下结构反序列化JSON:

"FKeyColumn": [{
                "ForeignKeyColumns": {
                    "Id": "Id"
                },
                "ReferenceTable": "Expense_Group_Configurations"
            }],

"FKeyColumn": [{
                "ForeignKeyColumns": {
                    "Vid": "Id"
                },
                "ReferenceTable": "Expense_Group_Configurations"
            }]     

           ...

我不知道如何构造我的ForeignKeyColumns类,因为它所代表的JSON对象包含任意键值对(除了始终被命名为ForeignKeyColumns的对象之外,没有任何设置结构)。我如何用GSON解析这个?

1 个答案:

答案 0 :(得分:0)

它需要一个FKeyColumn对象的自定义反序列化器:

public class FKeyColumnDeserializer implements JsonDeserializer<FKeyColumn> {

          public FKeyColumn deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
              throws JsonParseException {
            final JsonArray jsonFKArray = json.getAsJsonArray();
            final FKeyColumn fkc = new FKeyColumn();

            for (int i = 0; i < jsonFKArray.size(); i++) {
              final JsonObject fkObject = (JsonObject) jsonFKArray.get(i);
              final String ReferenceTable = fkObject.get("ReferenceTable").getAsString();
              final JsonObject ForeignKeyColumns = (JsonObject) fkObject.get("ForeignKeyColumns");

              Set<Entry<String, JsonElement>> entrySet = ForeignKeyColumns.entrySet();
              for(HashMap.Entry<String, JsonElement> entry : entrySet){
                  fkc.fkRefTableMap.put(entry.getKey(), ReferenceTable);
              }
            }


            return fkc;
          }
    }