如何将字段随参数变化的Json转换为Gson?

时间:2019-07-11 22:24:54

标签: json android-studio gson retrofit retrofit2

我正在使用改造,我正在尝试将动态Json转换为Gson,但是Json的字段取决于参数。例如,如果我有参数1,2

JSON格式:

{  
   "data":{  
  "1":{  
     "urls":{  
        "website":[  
           "https://bitcoin.org/"
        ],
        "source_code":[  
           "https://github.com/bitcoin/"
        ]
     },
     "logo":"https://s2.coinmarketcap.com/static/img/coins/64x64/1.png"
     ... 

  },
  "2":{  
     "urls":{  
        "website":[  
           "https://litecoin.org/"
        ],
        "source_code":[  
           "https://github.com/litecoin-project/litecoin"
        ]
     },
     "logo":"https://s2.coinmarketcap.com/static/img/coins/64x64/2.png"
     ...
      }
   }
}

请注意,可以有任意多个参数。

1 个答案:

答案 0 :(得分:0)

如果可能的话,可以将其设置为数组,而不是将“数据”的类型作为对象:

{
  "data": [
    {
      ...
    },
    {
      ...
    }
  ]
}

现在,当您处理“数据”元素时,您可以轻松地检查长度并查看有多少。假设您已经解析了Json并可以访问“数据”,则用于处理该数据的Java代码如下所示:

JsonArray array = dataElement.getAsJsonArray();
for(JsonElement element : array){
    JsonObject object = element.getAsJsonObject();
    String logo = object.getAsJsonPrimitive("logo").getAsString();
    ...
}

如果这不可能,那么您必须执行以下操作:

JsonObject dataObject = ...
int i = 1;
while(true){
    JsonElement element = dataObject.get("" + i);
    if(!element.isJsonObject()){
        break;
    }
    JsonObject object = element.getAsJsonObject();
    // do stuff with object
    i++;
}