我想在我的java程序中表示此文件。
我想做的是通过“键”值快速搜索它,例如,给定P26
我想要返回的值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"
}
我这样做是因为它们的原始文件似乎将是一个更复杂的数据结构。就像我之前说的,我想做的就是启用通过这些“ P值”进行查询的功能
我的想法是将P值作为键并将单词作为值的哈希图是实现此目的的最佳方法,但是我该如何做到这一点呢?
到目前为止,我一直在使用gson。
您的TypeToken与文件内容的结构不匹配,特别是与该数组不匹配(“缺失”)。
您可以创建一个与文件具有相同字段的数据类,或者保持简单,然后执行以下操作:
BufferedReader reader = new BufferedReader(new FileReader(new File("properties-es.json")));
Map<String, Map<String, Object>> map =
new Gson().fromJson(reader, HashMap.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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句