我正在尝试获取由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();
答案 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();
/////....
}