【发布时间】:2023-03-18 15:51:02
【问题描述】:
我在两个小时前启动了这段代码:
python -c "import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)" < input.yaml > output.json
我有一个 450 MB 的 YAML 文件,在此转换中浪费的时间实在令人难以置信(实际上仍在转换中) 在我使用 2 MB 的 YAML 测试文件测试代码之前(在互联网上找到的代码)。我收到了一个 9 MB 的转换后的 JSON 文件。这对我来说真的很奇怪(JSON 需要更多空间),但奇怪的是 python 打开 2 MB YAML 文件比打开 9 MB 的 JSON 文件浪费更多时间。 JSON 文件会立即打开,而 YAML 文件需要 2 分钟。 有人可以解释这些事情吗? python、JSON和YAML解析器背后的魔力在哪里?
【问题讨论】:
-
JSON 适用于无状态的流式解析。 YAML 支持反向引用等功能——它不可能被无状态地解析,除非您只支持该语言的一小部分。 tl;dr:不是为速度而设计的。
-
(JSON 也不是特别快——对于您在这里谈论的那种数据大小,您可能应该使用类似MsgPack 的东西。