有没有一种方法可以在Python中解析minecraft命令风格的JSON



Minecraft的JSON解析非常松散。Minecraft认为可以的JSON不能解析为有效的JSON,也不能解析为YAML,也不能直接评估为Python代码。

Minecraft精细解析的JSON犯罪包括:

  1. 允许单引号'而不是双引号"。(因此,不需要转义单引号中的双引号。(
  2. 允许未加引号的键
  3. 允许使用未加引号的字符串值

因此,Minecraft认为以下内容有效:{foo:bar,'foo2':'bar "foobar"'}

除了编写自己的解析器之外,还有什么简单的方法可以诱使python将其解码为dict吗?

我已经尝试过demjson和dirtyjson模块,它们在第3点都失败了。

要使用包含'"的字符串变量,需要在Python中使用三重doubleqoute。然后可以删除所有引号,然后使用regex再次用"引号包裹所有部分。

import re
datastr = r"""{foo:bar, 'foo2':'bar "foobar"', 'foo3':"bar 'foobar' "barfoo"}"""
# remove all quotes
datastr = datastr.replace("'", "")
datastr = datastr.replace('"', '')
datastr = datastr.replace(", ", ",")
# >> datastr is now {foo:bar,foo2:bar foobar,foo3:bar foobar barfoo}
# wrap parts with quotes
datastr = re.sub(r"([w|s]+):([w|s]+)", r'"1":"2"', datastr)
# >> datastr is now {"foo":"bar","foo2":"bar foobar","foo3":"bar foobar barfoo"}

这涵盖了您提到的所有可能性(还有更多的可能性,因为它还可以修复json键中的不规则字符/空格/引号(。如果这对整个数据集不起作用,也许可以看看这样的包https://pypi.org/project/demjson/

最新更新