按顺序读取 JSON 文件

Posted

技术标签:

【中文标题】按顺序读取 JSON 文件【英文标题】:Reading a JSON file in order 【发布时间】:2018-04-23 21:46:36 【问题描述】:

我有一个包含键值对映射的 json 文件,但每个值都是值列表


     "car":["BMW", "AUDI"],
      "OS":["Mac", "Win", "Ubuntu"],
      "food":["Burger", "Taco"]

我需要在 java 类中读取它们并将其转换为有序散列。我知道集合和散列是无序的,所以如果有办法获取键的有序列表,那将非常有帮助。 另外,如果有办法重新排序信息并获得一个很好的键列表。

【问题讨论】:

您可能想澄清您的要求。 “一组键/值对”是一个映射,我猜这也是您所说的“哈希”的意思。 是的,我要问的是一种按特定顺序读取此文件的方法。汽车->操作系统->食物 也许你误解了我的评论,但不清楚你在问什么,因为你使用了令人困惑的术语。此外,在 *** 上,您应该想出您迄今为止所做的工作,而哪些(可能)不起作用。 这里不起作用的是,在 JAVA 中无法读取此 JSON 并按此特定顺序将其写入控制台(例如)。 创建一个Model/Object String item; List<String> subItems; 然后你可以按照你喜欢的方式对你的List<Model> 进行排序。 【参考方案1】:

我认为你的意思是一张地图,而不是一套。集合没有键,而 Map 有。

HashMap 以哈希表的形式实现,并且没有对键或值进行排序。 TreeMap是基于红黑树结构实现的,按key排序。 LinkedHashMap 保留插入顺序 Hashtable 是同步的,与 HashMap 不同。

所以在你的情况下,如果你想保留插入顺序,你应该使用 LinkedHashMap。如果你想按键排序,你应该使用TreeMap

source

更新

要阅读,可以使用Gson:

String json = "'car':['BMW', 'AUDI'],'OS':['Mac', 'Win', 'Ubuntu'],'food':['Burger', 'Taco']";

// Convert the JSON String in a LinkedHashMap (to keep the insertion order)
Map<String, List<String>> map = new Gson().fromJson(json, new TypeToken<LinkedHashMap<String, List<String>>>().getType());

// Print it, for proof
map.forEach((k, v) -> System.out.println("k = " + k + " | v = " + v));

【讨论】:

我已经用过这些了,但是没有用。我没有插入这些值。它们已经在 J​​SON 文件中。 谢谢!这正是我正在寻找的

以上是关于按顺序读取 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

C ++:从文本文件中读取单行,按字母顺序对单词进行排序

如何从OpenCV的目录中按顺序读取文件?

使用node.js按顺序读取目录内所有文件的内容

对 JSON 进行排序或按原始顺序获取 JSON [重复]

是否可以控制 Rails 读取 .CSS 文件的顺序,还是按惯例固定?

如何对大量 csv 文件进行排序以按特定顺序读取它们?