gpt4 book ai didi

Python:可以将解码项与原始行号相关联的JSON解码库?

转载 作者:太空狗 更新时间:2023-10-30 01:39:09 25 4
gpt4 key购买 nike

我经常将 JSON 用于用户可编辑的配置文件。 json.loads 当然会为我挑选格式错误的 JSON,但有时会出现一些错误,直到我检查生成的字典/列表/字符串时我才发现。我希望能够提供有用的错误,例如“第 23 行的无效值‘foo’”,但是当我取回我的字典时,我丢失了与原始行号的任何映射。

似乎有人可能已经编写了一个 JSON 解析器,它用一些关于它在输入文本中出现的位置的元数据来标记每个输出对象:Python 是否存在这样的东西?

示例:

1. [{"foo": "x"},
2. {"bar": "y"}]

经过上面的解析,我发现“y”实际上不是“bar”的合法值,我想知道它来自第 2 行。

最佳答案

AFAIK 你想要的东西不存在,但我知道如果你感兴趣的话你可以如何实现它......

json 模块有一个用于解码对象的 Hook ,您可以(错误地)使用它来进行解码时对象验证。但是,这不会解决您的问题,因为 Hook 不会获取行号信息。这个问题变得更加复杂,因为在 Python 2.7+ 中您不再收到逐行的错误消息。您只能从纯 Python JSON 解码器中获取它们,而较新的版本使用(更快的)C 库。

所以我们有两个问题要解决。

1) 您可以像这样子类化 json.JSONDecoder 来使用纯 python 解码器:

class PyDecoder(json.JSONDecoder):
def __init__(self, encoding=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, strict=True,
object_pairs_hook=None):
super(PyDecoder, self).__init__(encoding, object_hook, parse_float,
parse_int, parse_constant, strict)
self.scan_once = json.scanner.py_make_scanner(self)

2) 要进行验证,您需要将 json.decoder.JSONObject 替换为执行几乎相同操作但还将行号信息传递给验证例程的方法。

关于Python:可以将解码项与原始行号相关联的JSON解码库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7225056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com