Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 强制JSON结果的顺序_Scala - Fatal编程技术网

Scala 强制JSON结果的顺序

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

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

< P>我会考虑尝试像JSON4S之类的东西。< /P> JObject类型似乎具有有序字段

否则我会问你为什么要订购?
你可以随时用键来获取。

< P>我会考虑尝试像JSON4S之类的东西。

JObject类型似乎具有有序字段

否则我会问你为什么要订购?
您始终可以映射。按键获取。

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

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

依赖顺序很可能会引入困难的bug和代码的不兼容性。以正确性换取速度永远是一笔糟糕的交易


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

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

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

依赖顺序很可能会引入困难的bug和代码的不兼容性。以正确性换取速度永远是一笔糟糕的交易


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

如果您的问题中包含“希望避免开销”,您可能希望避免
Scala.util.parsing.json
。如果您的问题中包含“希望避免开销”,您可能希望避免
scala.util.parsing.json
。json4s看起来很有希望,尽管我需要找到一种方法来强制所有字段都被解析为字符串(例如,长字符串的数字不会被解析为双精度)。我正在使用slick DB框架,并将这些值转储到一个准备好的语句中。填充准备好的语句使用数字索引来处理每个变量映射。假设我可以为每个键名创建一个查找表,并将其添加到各自的索引中,但我不希望处理维护这样一个表的开销,也不希望处理在每个结果行上执行该操作的处理能力。字符串字段在json中用双引号括起来。json4s将返回正确的类型。如果您使用oracle或mssql,请小心使用slick,因为它要花很多钱才能进入Prod。不幸的是,我无法控制json提要,并且这些数字没有像可能应该的那样放入字符串中。通过stock解析,我可以指定JSON.globalNumberParser={input:String=>input}来强制将所有内容转换为String。json4s可能有一种方法可以做到这一点,我可能需要做更多的研究。json4s看起来很有希望,尽管我需要找到一种方法来强制所有字段都被解析为字符串(例如,长字符串的数字不会被解析为双精度)。我使用的是slick DB框架,我把这些价值观写进一份准备好的声明中。填充准备好的语句使用数字索引来处理每个变量映射。假设我可以为每个键名创建一个查找表,并将其添加到各自的索引中,但我不希望处理维护这样一个表的开销,也不希望处理在每个结果行上执行该操作的处理能力。字符串字段在json中用双引号括起来。json4s将返回正确的类型。如果您使用oracle或mssql,请小心使用slick,因为它要花很多钱才能进入Prod。不幸的是,我无法控制json提要,并且这些数字没有像可能应该的那样放入字符串中。通过stock解析,我可以指定JSON.globalNumberParser={input:String=>input}来强制将所有内容转换为String。也许有一种方法可以用json4s实现这一点,我可能需要做更多的研究。Jackson是一个基于Java的库。有一个叫杰克森的包装纸,是游戏用的!框架一段时间。该项目已被放弃,因此其他图书馆也越来越受欢迎。Json4s可以得到Jackson的支持,因此我建议在scala中使用它。Jackson还有一个scala模块,可以使java库与scala对象一起工作->Jackson是一个基于java的库。有一个叫杰克森的包装纸,是游戏用的!框架一段时间。该项目已被放弃,因此其他图书馆也越来越受欢迎。Json4s可以得到Jackson的支持,因此我建议在scala中使用它。Jackson还有一个scala模块,可以使java库与scala对象一起工作->