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

标签 python json

我正在解析包含 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/

相关文章:

python - kmodes VS one-hot encoding + kmeans 用于分类数据?

python - 为什么我的代码在函数中连接服务器时不起作用,但当我使用 __init__ 调用连接时却工作正常?

java - 包含文件和 JSON 对象的多部分请求

javascript - 如何编写下拉选项来加载 JSON 文件?

python - 将文件转换为列表的最快方法?

python - Django 管理错误截断了不正确的 DOUBLE 值 :""

javascript - 使用基于值的 javascript 更新 Json 对象

javascript - 查找一个 JSON 文件中的键值,并将其替换为第二个 JSON 中的键值,其中第一个 JSON 中的值与第二个 JSON 中的键匹配

php - Android 使用 php 服务器连接 mysql 数据库

python - 如何比较 Jinja2 中的两个日期?