我想在我的java程序中表示this file。
我想要做的是快速搜索" key"值,例如,给定值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"
}
我做了因为他们原来file似乎是一个更复杂的数据结构。正如我之前所说,我想要做的是能够通过那些&#34; P值进行查询&#34;
我的想法是,将P值作为键,将单词作为值的散列图是最好的方法,但我怎样才能实现这一点?
到目前为止,我一直在使用gson。
答案 0 :(得分:0)
问题是"missing"
属性的值是字符串数组,而不是对象或对象数组。通过使用Gson的方式,除了抛出错误之外,它无法做任何事情。您需要单独处理"properties"
和"missing"
值。
答案 1 :(得分:0)
你的TypeToken与文件内容的结构不匹配,特别是那个数组(&#34;缺少&#34;)。
您可以使用与文件相同的字段创建数据类,或者保持简单,只需执行以下操作:
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);