2014-07-03 26 views
-1
{"myContainer" : 
    { "couldBeAnything" : [ 
          {"id":1, "name":"sb", "category":"couldBeAnything"}, 
          {"id":2, "name":"bs", "category":"couldBeAnything"} 
         ], 
     "somethingElse" : [ 
         {"id":1, "name":"sdsa","category":"somethingElse"}, 
         {"id":2, "name":"ve","category":"somethingElse"} 
         ] 
    }, 
"id" : 0 
} 

到目前为止,我有:使用GSON转换JSON这应该是对象的数组,而不是

Type myContainerType = new TypeToken<MyContainer>(){}.getType(); 
MyContainerType myContainerType = gson.fromJson(myJson.getValue(), myContainerType); 

public class MyContainer { 
    private int id; 
    private Map<String, List<Foo>> foo; // and foo has id, name, category 

结果,没有错误,一个人口稠密ID字段,但只是一个空图

回答

2

我认为结构Map<String, List<Foo>>结构json是错误的。当你说map时,你不需要用{来包含每个键值。只需将整个关键值放在一个{}中,并用逗号分隔。例如

{ 
    "myContainer": { 
    "couldBeAnything": [ 
     { 
    "id": 1, 
    "name": "sb", 
    "category": "couldBeAnything" 
     }, 
     { 
    "id": 2, 
    "name": "bs", 
    "category": "couldBeAnything" 
     } 
    ], 
    "somethingElse": [ 
     { 
    "id": 1, 
    "name": "sdsa", 
    "category": "somethingElse" 
     }, 
     { 
    "id": 2, 
    "name": "ve", 
    "category": "somethingElse" 
     } 
    ] 
    }, 
    "id": 0 
} 

有了这个JSON它完美

public static void main(String[] args){ 
    String json = "{\"myContainer\":{\"couldBeAnything\":[{\"id\":1,\"name\":\"sb\",\"category\":\"couldBeAnything\"},{\"id\":2,\"name\":\"bs\",\"category\":\"couldBeAnything\"}],\"somethingElse\":[{\"id\":1,\"name\":\"sdsa\",\"category\":\"somethingElse\"},{\"id\":2,\"name\":\"ve\",\"category\":\"somethingElse\"}]},\"id\":0}"; 

    Map<String, List<Foo>> obj = new HashMap<String, List<Foo>>(); 
    Gson gson = new Gson(); 
    obj = gson.fromJson(json, obj.getClass()); 
    System.out.println(obj); 
} 

输出

{id=0.0, myContainer={couldBeAnything=[{id=1.0, name=sb, category=couldBeAnything}, {id=2.0, name=bs, category=couldBeAnything}], somethingElse=[{id=1.0, name=sdsa, category=somethingElse}, {id=2.0, name=ve, category=somethingElse}]}} 

与方法的问题是场foo的命名。您的json包含名称为myContainer的Map<String, List<Foo>>。因此,修改您的容器类像下面,它会工作得很好:)

public class MyContainer { 
    private int id; 
    private Map<String, List<Foo>> myContainer; 
} 

现在,这将工作

Type myContainerType = new TypeToken<MyContainer>(){}.getType(); 
MyContainer myContainer = gson.fromJson(json, myContainerType); 
System.out.println(myContainer); 
+0

json的错误只是错别字,这个问题是java的结构,已经更新了问题 – NimChimpsky

+0

随着该JSON它工作正常。我的代码更新了答案。 –

+0

恩,对,我会仔细检查一下。也许我做了noob错误,因为那是我第一次尝试。谢谢 – NimChimpsky