完全披露:我是以下软件包的维护者。
现在有一个新的 Python 包可以解决这个用例:https://github.com/open-alchemy/json-source-map
安装:pip install json_source_map
例如,在您的情况下:
from json_source_map import calculate
source = '''[{"foo": "x"},
{"bar": "y"}]'''
print(calculate(source))
打印出来:
{
"": Entry(
value_start=Location(line=0, column=0, position=0),
value_end=Location(line=1, column=13, position=28),
key_start=None,
key_end=None,
),
"/0": Entry(
value_start=Location(line=0, column=1, position=1),
value_end=Location(line=0, column=13, position=13),
key_start=None,
key_end=None,
),
"/0/foo": Entry(
value_start=Location(line=0, column=9, position=9),
value_end=Location(line=0, column=12, position=12),
key_start=Location(line=0, column=2, position=2),
key_end=Location(line=0, column=7, position=7),
),
"/1": Entry(
value_start=Location(line=1, column=0, position=15),
value_end=Location(line=1, column=12, position=27),
key_start=None,
key_end=None,
),
"/1/bar": Entry(
value_start=Location(line=1, column=8, position=23),
value_end=Location(line=1, column=11, position=26),
key_start=Location(line=1, column=1, position=16),
key_end=Location(line=1, column=6, position=21),
),
}
这会告诉您每个键和值在原始 JSON 文档中的确切位置开始和结束。例如,它告诉您"y" 在第 1 行(行为零索引)并从第 8 列开始,到第 11 列结束。