java - 将 Json 解析为 Map<String,String>

标签 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",
   "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 解析方面的专家,所以请告诉我我的错误在哪里,或者如果有其他方法可以实现这种行为,我将不胜感激。

最佳答案

我认为问题出在您的 CollectionList 上的 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>>>(){});

结果是 ListLinkedHashMap对象。

为您的GSON例如,您只需要删除 Collection<> ,或 List<>如果您愿意。

关于java - 将 Json 解析为 Map<String,String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929427/

相关文章:

Web 应用程序中的 Java Spring 错误处理性能

java - 在 Windows 版 Sublime Text 上运行 Java

java - 字符串分词器,分隔符

Android + Robolectric - ContentProvider 中的 queryBuilder.query() 中的 RuntimeException/InstantiationException

java - 如何在 Wi-Fi 中的设备之间同步数据

将 mysql 数据转换为 json 的 PHP 脚本执行时不返回任何内容

java - 将 edittext 中的值乘以从 firebase 检索到的 textview 中的值

java - 如何对 Android Studio 中动态创建的多个按钮执行 onclick 操作

javascript - 使用 this 关键字来回转换循环结构

javascript - AngularJS - 如何使用表单添加到对象