使用文件中的 json 数据填充哈希图
populate a hashmap with json data from file
我想在我的 java 程序中代表 this file。
我想做的是通过 "key" 值快速搜索它,例如,给定值 P26
我想 return spouse
.
我以为我可以这样做:
BufferedReader reader = new BufferedReader(new FileReader(new File("properties-es.json")));
Map<String, HashMap<String, Object>> map =
new Gson().fromJson(reader, new TypeToken<HashMap<String, HashMap<String, Object>>>() {}.getType());
这是根据键名获取值
String value = (String) map.get("properties").get("P6");
System.out.println(value);
但实际上当我 运行 的第一位时,我得到了错误:
Expected BEGIN_ARRAY but was STRING at line 1347 column 10
我为简化数据结构而修改的文件的那部分如下所示:
(^这是个坏主意吗?原始文件是否适合在我描述的散列图中表示?)
"P1655": "station number",
"P1656": "unveiled by",
"P1657": "MPAA film rating",
"P1658": "number of faces"
}
我这样做是因为他们原来的 file 似乎是一个更复杂的数据结构。正如我之前所说,我想要做的是启用那些 "P values"
的查询能力
我认为以 P 值作为键,以单词作为值的散列图是实现此目的的最佳方式,但我该如何实现?
到目前为止我一直在使用gson。
问题是 "missing"
属性 的值是字符串数组,而不是对象或对象数组。按照您使用 Gson 的方式,除了抛出错误外,它什么也做不了。您需要分别处理 "properties"
和 "missing"
值。
您的 TypeToken 与文件内容的结构不匹配,特别是那个数组 ("missing")。
您可以创建一个数据 class,其中包含与您的文件相同的字段,或者保持简单,只需执行以下操作:
BufferedReader reader = new BufferedReader(new FileReader(new File("properties-es.json")));
Map<String, Map<String, Object>> map =
new Gson().fromJson(reader, HashMap.class);
您将收到一个编译器警告,可以将其抑制,但它应该可以正常工作。
随着数据class:
// if inner class add "static"
public class Data {
public Map<String,String> properties;
public List<String> missing;
}
//...
Data data = new Gson().fromJson(reader, Data.class);
我想在我的 java 程序中代表 this file。
我想做的是通过 "key" 值快速搜索它,例如,给定值 P26
我想 return spouse
.
我以为我可以这样做:
BufferedReader reader = new BufferedReader(new FileReader(new File("properties-es.json")));
Map<String, HashMap<String, Object>> map =
new Gson().fromJson(reader, new TypeToken<HashMap<String, HashMap<String, Object>>>() {}.getType());
这是根据键名获取值
String value = (String) map.get("properties").get("P6");
System.out.println(value);
但实际上当我 运行 的第一位时,我得到了错误:
Expected BEGIN_ARRAY but was STRING at line 1347 column 10
我为简化数据结构而修改的文件的那部分如下所示: (^这是个坏主意吗?原始文件是否适合在我描述的散列图中表示?)
"P1655": "station number",
"P1656": "unveiled by",
"P1657": "MPAA film rating",
"P1658": "number of faces"
}
我这样做是因为他们原来的 file 似乎是一个更复杂的数据结构。正如我之前所说,我想要做的是启用那些 "P values"
的查询能力我认为以 P 值作为键,以单词作为值的散列图是实现此目的的最佳方式,但我该如何实现?
到目前为止我一直在使用gson。
问题是 "missing"
属性 的值是字符串数组,而不是对象或对象数组。按照您使用 Gson 的方式,除了抛出错误外,它什么也做不了。您需要分别处理 "properties"
和 "missing"
值。
您的 TypeToken 与文件内容的结构不匹配,特别是那个数组 ("missing")。
您可以创建一个数据 class,其中包含与您的文件相同的字段,或者保持简单,只需执行以下操作:
BufferedReader reader = new BufferedReader(new FileReader(new File("properties-es.json")));
Map<String, Map<String, Object>> map =
new Gson().fromJson(reader, HashMap.class);
您将收到一个编译器警告,可以将其抑制,但它应该可以正常工作。
随着数据class:
// if inner class add "static"
public class Data {
public Map<String,String> properties;
public List<String> missing;
}
//...
Data data = new Gson().fromJson(reader, Data.class);