gpt4 book ai didi

python - 解析一行中的多个json对象

转载 作者:太空狗 更新时间:2023-10-30 02:18:11 25 4
gpt4 key购买 nike

我正在解析包含 json 对象的文件。问题是有些文件在一行中有多个对象。例如:

{"data1": {"data1_inside": "bla{bl\"a"}}{"data1": {"data1_inside": "blabla["}}{"data1": {"data1_inside": "bla{bla"}}{"data1": {"data1_inside": "bla["}}

我创建了一个函数,当没有左括号时尝试解析子字符串,但值中可能有大括号。我尝试通过检查引号的开头和结尾来跳过值,但也有带有转义引号的值。关于如何处理这个问题的任何想法?

我的尝试:

def get_lines(data):
lines = []
open_brackets = 0
start = 0
is_comment = False
for index, c in enumerate(data):
if c == '"':
is_comment = not is_comment
elif not is_comment:
if c == '{':
if not open_brackets:
start = index
open_brackets += 1

if c == '}':
open_brackets -= 1
if not open_brackets:
lines.append(data[start: index+1])

return lines

最佳答案

你可以使用json raw_decoder!这允许在第一个 json 对象之后读取带有额外数据的 json 字符串。用法示例如下:

>>> dec = json.JSONDecoder()
>>> json_str = '{"data": "Foo"}{"data": "BarBaz"}{"data": "Qux"}'
>>> dec.raw_decode(json_str)
({u'data': u'Foo'}, 15)
>>> dec.raw_decode(json_str[15:])
({u'data': u'BarBaz'}, 18)
>>> dec.raw_decode(json_str[33:])
({u'data': u'Qux'}, 15)

元组的第一部分是 json 对象,第二部分是读取字符串时使用了多少字符串。因此,像这样的循环将允许您遍历字符串中的所有 json 对象。

dec = json.JSONDecoder()
pos = 0
while not pos == len(str(json_str)):
j, json_len = dec.raw_decode(str(json_str)[pos:])
pos += json_len
# Do something with the json j here

关于python - 解析一行中的多个json对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967236/

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