【问题标题】:How to parse JSON to List with Maps in Gson?如何使用 Gson 中的地图将 JSON 解析为列表?
【发布时间】:2013-03-05 12:59:45
【问题描述】:

我有以下 Java 类:

public class ModuleParsed {

  String id_component;
  String id_instance;
  Map<ModuleParam, ModuleParam> input;
  Map<ModuleParam, List<ModuleParam>> output;
  int id_paas;
}

public class ModuleParam {

  String name;
  Object type;
}

将其解析为List&lt;ModuleParsed&gt; 的 JSON 应该是什么?

listModules = gson.fromJson(br, new TypeToken<List<ModuleParsed>>() {}.getType());

在我介绍输入和输出参数之前一切正常。

编辑

通过反向过程,我发现 JSON 应该类似于

[
    {
        "id_component": "mod1",
        "id_instance": "mod1_inst1",
        "input": {  
            "moduleParam": {
                "name": "param3",
                "type": "obj3"
            },
            "moduleParam": {
                "name": "param2",
                "type": "obj2"
            }
        },
        "id_paas": 1
    },
    {
        "id_component": "mod2",
        "id_instance": "mod2_inst1",
        "input": {
            "moduleParam": {
                "name": "param3",
                "type": "obj3"
            },
            "moduleParam": {
                "name": "param2",
                "type": "obj2"
            }
        },
        "id_paas": 1
    }
]

moduleParam 元素类似于:parser.ModuleParam@36c51089

无论我如何命名这些元素,我都会收到以下错误:

Exception in thread "main" com.google.gson.JsonParseException: Expecting object found: "moduleParam"

如何使用 Gson 获取 ModuleParsed 类?

【问题讨论】:

标签: json map gson


【解决方案1】:

根据@Brian 的评论,我意识到我不需要使用复杂的对象作为键,所以这是我的解决方案。

public class ModuleParsed {

    String id_component;
    String id_instance;
    Map<String, ModuleParam> input;
    Map<String, List<ModuleParam>> output;
    int id_paas;
}

public class ModuleParam {

    String name;
    String id_module;
    String id_instance;
}

我为此构建了以下 JSON

[
    {
        "id_component": "mod1",
        "id_instance": "mod1_inst1",
        "input": {
            "input1": {}
        },
        "output": {
            "output1": [
                {
                    "name": "input1",
                    "id_module": "mod2",
                    "id_instance": "mod2_inst1",
                    "type": "paramType"
                },
                {
                    "name": "input2",
                    "id_module": "mod2",
                    "id_instance": "mod2_inst1",
                    "type": "paramType"
                }
            ],
            "output2": []
        },
        "id_paas": 1
    },
    {
        "id_component": "mod2",
        "id_instance": "mod2_inst1",
        "input": {
            "input1": {
                "name": "output1",
                "id_module": "mod1",
                "id_instance": "mod1_inst1",
                "type": "paramType"
            },
            "input2": {
                "name": "output1",
                "id_module": "mod1",
                "id_instance": "mod1_inst1",
                "type": "paramType"
            }
        },
        "output": {},
        "id_paas": 1
    }
]

这次JSON解析正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2023-03-10
    • 2013-02-02
    • 1970-01-01
    相关资源
    最近更新 更多