【发布时间】:2019-06-11 19:35:42
【问题描述】:
通常我将 json 字符串解析为 json 对象,而不是直接操作 json 字符串。例如,像
这样的json字符串{"number": "1234567"}
如果我必须在末尾添加 000
...
{...,"number" : "1234567000",...}
....
我将使用 jackson 将其解析为 Json 对象或 POJO
我了解将可读性透视图解析为 Json 对象或 POJO 要好得多,但我对性能感到好奇。在这种情况下,如果我直接操作json字符串,我必须使用正则表达式提取数字属性,并在末尾添加000,这比如果有大量数据解析成Json Object要贵得多?因为字符串对象基本上是创建一个新的字符串对象?
编辑: 基于@Itai Steinherz 的链接,我还在 JS 中做了一个基准测试,它表明 json 解析更好 https://jsbench.me/93jr1w6k5b/1
【问题讨论】:
-
您为什么不自己在负载下或使用 currentMillis 检查性能并告诉我们?这实际上取决于各种因素,例如 json 大小等
-
每次你必须在解析和正则表达式之间做出决定时,去解析。解析器有严格的规则,由专业团队维护(几乎总是)。而编写自己的正则表达式很容易出错
-
Everytime you have to decide between parse and regex, go for parse这不是真的,如果性能真的是一个瓶颈,你可以考虑做一些疯狂的事情。正如我所说,如果真的如此。 -
@deathangel908 是的,使用高度专业化的代码,您可能会挤出一些性能,但您无法控制的 Json 上的字符串操作肯定会以令人讨厌的方式出现问题。如果您可以控制 Json(结构、内容等),那么通过更改 Json/api 本身可能会有更快、更简单且不易出错的方法来实现它。
-
如果您不能完全控制可能的输入,当“只是将几个零附加到一个数字”时,正则表达式可能会中断:预期为数字的字符串包含非数字(例如
.或E) - 你在做什么?默默地保持输入不变?扔?无论如何都附加零?如果“数字”是0怎么办 - 追加几个零是正确的做法,还是您的意思是添加+1000?