使用文件

时间:2015-04-29 02:52:18

标签: java json hashmap gson

我想在我的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。

2 个答案:

答案 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);