2

我从 json 导入了非常大的结果集。json 中的每一行数据都返回一个非常具体的“列”顺序,我想快速迭代。我宁愿避免检查/匹配键来处理每条数据的开销。不幸的是,scala.util.parsing.json 将这些列放入一个 Map 对象中,并且在遍历 Map 时,它的迭代顺序是随机的,不一定反映 JSON 结果中列的顺序。有没有办法让解析器强制执行 JSON 列的顺序?一个想法是,是否有办法告诉解析器在生成对象时使用 LinkedHashMap 或 ListMap。这可以通过扩展类或添加其他特征来实现吗?我有其他选择吗?

4

2 回答 2

3

我强烈建议您不要依赖键/值对的顺序。JSON 对象定义为:

对象是一组无序的名称/值对。

依赖顺序很可能会引入困难的错误和代码的不兼容性。用正确性来换取速度总是一件坏事。

相反,我建议找到一个快速、正确的解析器。我之前用过Jackson,速度非常快,可以和Scala很好地配合使用。您注释您的任意类,Jackson 将 JSON 解析为该类的实例。然后,您可以将这些实例作为本机 Java/Scala 对象进行处理,这既快速又健壮。

于 2013-06-27T18:17:33.320 回答
1

我会考虑尝试类似 json4s 的东西。

JObject 类型似乎具有有序字段。

https://github.com/json4s/json4s

否则我会问你为什么需要订购它们?您始终可以通过键 map.get。

于 2013-06-27T17:28:53.793 回答