我有 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);
但是它抛出了这个错误:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1
我不是 Json 解析方面的专家,所以请告诉我我的错误在哪里,或者如果有其他方法可以实现这种行为,我将不胜感激。
最佳答案
我认为问题出在您的 Collection
上List
上的 wrapper 一个。
您只需要定义 list_Objects
作为List<Map<String, String>>
.
我刚刚用 Jackson 的 ObjectMapper
尝试了以下操作(它应该和 GSON 一样工作)并且它工作正常:
List<Map<String, String>> list_objects = objectMapper.readValue(jsonString, new TypeReference<List<Map<String, String>>>(){});
结果是 List
的 LinkedHashMap
对象。
为您的GSON
例如,您只需要删除 Collection<>
,或 List<>
如果您愿意。
关于java - 将 Json 解析为 Map<String,String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929427/