【问题标题】:Parsing JSON response using GSON with dynamic Key使用 GSON 和动态密钥解析 JSON 响应
【发布时间】:2017-04-05 07:08:26
【问题描述】:

这就是我的 JSON 的样子,我必须解析 JSON,如何使用 GSON 来完成

{
  "data": {
    "a": {
      "abc": {
        "c": "d"
      }
    }
  }
}

其中“a”是动态键,可能会不时变化。我现在找不到解决方案

【问题讨论】:

标签: android json gson


【解决方案1】:

型号

public class Model {

    private HashMap<String, String> data;

    public Model() {
    }
}

使用 Gson 将 json 字符串转换为 Hashmap 并从 hashmap 中准备数据

Gson gson = new Gson();
Type typeHashMap = new TypeToken<Map<String, String>>(){}.getType();
Map<String,String> map = gson.fromJson(YOUR_JSON, typeHashMap);

Set<Map.Entry<String, String>> entrySet = data.entrySet();

    Iterator iterator = entrySet.iterator ();

    for(int j = 0; j < entrySet.size(); j++) {
        try {
            Map.Entry entry = (Map.Entry) iterator.next();
            String key = entry.getKey().toString();
            String value = entry.getValue().toString();
            //Add it to your list
        }
        catch(NoSuchElementException e) {
            e.printStackTrace();
        }
        break;
    }

【讨论】:

  • 可以的,我一会儿更新答案
  • 感谢您的回答,但我正在使用改造来进行这个需要响应模型的 API 调用,所以我正在寻找一种方法来制作一个模型类来解析这个响应你能指导我完成吗请问?
  • 您也可以将其转换为模型
  • 哪个代码? Java 还是你想要的响应结构?
  • 我的模型类看起来像这个 public class Model { @SerializedName("data") @Expose private Map data;和 InnerModel 是包含“abc”序列化的内容,我可以通过这种方式获得动态但无法获得内部数据模型的“a”。当我尝试在邮递员中访问 API 时,得到了有效响应,但在应用程序中,我将所有解析的值都设为 null 并且无法理解其背后的原因
【解决方案2】:

我不确定您是否知道内部部分 abc。如果您知道它,那么您肯定可以使用 GSON 来完成。您必须为内部已知对象创建类,如下所示:

public class ABC {
public C abc;}

然后为 C 创建类:

public class C {
public String c;}

然后将 ABC 类作为 hashmap 值传递如下:

public HashMap<String, ABC> a;

【讨论】:

  • 是的,我知道内部部分。我的模型类看起来像这个 public class Model { @SerializedName("data") @Expose private Map data;和 InnerModel 包含“abc”的序列化我能够通过这种方式获得动态但无法获得内部数据模型的“a”。当我尝试在邮递员中访问 API 时得到了有效响应,但在应用程序中我将所有解析的值都设为 null 并且无法理解其背后的原因这就是我所做的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多