2013-03-05 66 views
0

我有以下Java類:如何解析JSON以使用Gson中的地圖列表?

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; 
} 

應該是什麼預期JSON解析它作爲一個List<ModuleParsed>

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要素是一樣的東西:[email protected]

無論怎樣,我的名字這些元素我得到以下錯誤:

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

如何使用Gson獲得ModuleParsed類?

+1

使用可變的複雜對象作爲'Map'鍵是一個非常糟糕的主意*尤其是因爲您沒有重寫equals和hashcode。您也會發現從它們生成可用的JSON非常困難。請參閱:http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/GsonBuilder.html#enableComplexMapKeySerialization() – 2013-03-05 22:46:06

+0

@Brian,如果我只是使用Map,是否可能?而不是>? – eskalera 2013-03-07 10:01:37

回答

0

以下@ 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被解析正確的這個時候。