Java 解析Json以映射<;字符串,字符串>;

Java 解析Json以映射<;字符串,字符串>;,java,android,json,parsing,gson,Java,Android,Json,Parsing,Gson,我有Json这样的响应: [ { "first_name": "fname1", "last_name": "lname1" }, { "first_name": "fname2", "last_name": "lname2", "city_name": "paris" }, { "first_name": "fname2", "last_name": "lname2", "city_name": "paris", "

我有
Json
这样的响应:

[
 {       
   "first_name": "fname1",
   "last_name": "lname1"
 },
 {
   "first_name": "fname2",
   "last_name": "lname2",
   "city_name": "paris"
 },
 {
   "first_name": "fname2",
   "last_name": "lname2",
   "city_name": "paris",
   "Address": "1st Ave"
 }
 .
 .
 .
]
我在JsonObject中的字段是动态的,所以我不能使用带有预定义字段的类,所以我决定使用Map来解析Json响应,如下所示:

Collection<List<Map<String,String>>> list_Objects = null;
Reader reader = new InputStreamReader(is);
Gson gson = new Gson();
Type collectionType = new TypeToken<Collection<List<Map<String,String>>>>(){}.getType();
list_objects = gson.fromJson(reader, collectionType);

我不是Json解析方面的专家,所以请告诉我我的错误在哪里,或者如果有其他方法来实现这种行为,我将不胜感激

如果我没看错的话,那么您需要定义两次列表

集合
将映射到如下结构


(因为列表是一种集合)。因此,尝试使用
列表
,看看这是否有效…

我认为问题在于
列表
上的
集合
包装器

您只需将
list\u对象定义为
list

我刚刚用Jackson的
ObjectMapper
(应该与GSON的工作原理相同)尝试了以下方法,效果不错:

List<Map<String, String>> list_objects = objectMapper.readValue(jsonString, new TypeReference<List<Map<String, String>>>(){});
List\u objects=objectMapper.readValue(jsonString,new TypeReference(){});
结果是
对象的
列表


对于您的
GSON
示例,您只需要删除
集合
,或者
列表
(如果愿意)。

映射需要一个数组,就像您为带有
[]
的开始-结束列表提供的数组一样。您在
JSON
中拥有的是一个对象列表,而不是MapsTry的列表@RaulRene:我无法更改JSON响应,您可以更正我的代码或任何其他方式来解析此JSON吗?为什么不使用map的映射?或者只是一个Map?Ty Raul的列表作为答案,但我已将其更改为:List_objects=null;类型collectionType=newTypeToken(){}.getType();如果没有成功,抛出同样的错误我对GSON不太熟悉,也许你可以和jackson一起试试上面的例子,看看效果如何?我会试试,谢谢你的时间。效果如何?你找到另一个解决办法了吗?考虑选择一个正确的答案或放下你自己的答案,如果你发现一个单独的解决方案抱歉迟到的反应,最后我得到它的工作通过检查我的URL!!!错误地遗漏了一个参数,因此响应表单webservice为[]!!如此愚蠢的错误;)但我用了你的答案,用了Collection.Ty
List<Map<String, String>> list_objects = objectMapper.readValue(jsonString, new TypeReference<List<Map<String, String>>>(){});