按照在文件中定义的顺序获取所有JSON键

时间:2018-07-25 18:37:44

标签: java arrays json gson

我正在尝试获取由Google Gson加载的json文件中找到的所有json键的数组。我过去曾经使用过SomeJsonObject.keySet(),但是集合并没有保留其内容的顺序。

我正在寻找的东西如下:

JsonElement schema_pre = new JsonParser().parse(new FileReader("SchemaFile.json"));
JsonObject schema = gson.fromJson(schema_pre, JsonObject.class);
String[] keys_all = schema.keyArray();

2 个答案:

答案 0 :(得分:2)

从JSON RFC7159:

  

对象是零个或多个名称/值对的无序集合[...]

因此,您所要求的API返回的信息将比JSON对象中实际包含的信息更多。因此,此行为将不符合该标准。

如果您确实需要对JSON对象进行排序,则始终可以使用数组而不是对象来以JSON兼容的方式表示信息:

{"first":1, "second":2} // Unordered
[{key:"first",value:1}, {key:"second",value:2}] // Ordered

将信息表示为数组的另一个动机是密钥可能会更改。大多数NoSQL数据库都能够在对象属性(例如MongoDB)上创建索引,并且即使不需要排序,上面的规范化通常也是最好的方法

但是,如果需要,仍可以使用特定的键将要查找的地图创建为临时索引,以高效访问JSON对象。

答案 1 :(得分:1)

考虑JsonReader,它从头到尾读取:

JsonReader reader = new JsonReader(/*Reader*/);

List<Object> objects = new ArrayList<>();

while (reader.hasNext()) {
     String name = reader.nextName();
     /////....
}