Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,是否有方法提取嵌入的json字符串?_Python_Json - Fatal编程技术网

在python中,是否有方法提取嵌入的json字符串?

在python中,是否有方法提取嵌入的json字符串?,python,json,Python,Json,因此,我正在解析一个非常大的日志文件,其中包含一些嵌入的json 我会看到这样的线条 foo=“{my_object:foo,bar:baz}”a=b c=d 问题是,由于内部json可以有空格,但在json之外,空格充当元组分隔符(除非它们有不带引号的字符串。Huzzah对于任何白痴来说都是一个好主意),我不知道如何在不重新实现json解析器的大部分的情况下找出json字符串的结尾 有没有Python的json解析器,我可以给它“{my_object:“foo”,“bar:“baz”}asdf

因此,我正在解析一个非常大的日志文件,其中包含一些嵌入的json

我会看到这样的线条

foo=“{my_object:foo,bar:baz}”a=b c=d

问题是,由于内部json可以有空格,但在json之外,空格充当元组分隔符(除非它们有不带引号的字符串。Huzzah对于任何白痴来说都是一个好主意),我不知道如何在不重新实现json解析器的大部分的情况下找出json字符串的结尾


有没有Python的json解析器,我可以给它
“{my_object:“foo”,“bar:“baz”}asdfasdf'
,它可以返回
({'my_object':'foo','bar':'baz'},'asdfasdf')
,还是我必须手工重新实现json解析器

匹配周围的所有内容

>>> re.search('^foo="(.*)" a=.+ c=.+$', 'foo="{my_object:foo, bar:baz}" a=b c=d').group(1)
'{my_object:foo, bar:baz}'
使用和

比如:

import shlex
import json

def decode_line(line):
    decoded = {}
    fields = shlex.split(line)
    for f in fields:
        k, v = f.split('=', 1)
        if k == "foo":
            v = json.loads(v)
        decoded[k] = v
    return decoded
这确实假设引号中的JSON被正确引用

下面是一个简短的示例程序,它使用了上述内容:

import pipes

testdict = {"hello": "world", "foo": "bar"}
line = 'foo=' + pipes.quote(json.dumps(testdict)) + ' a=b c=d'
print line
print decode_line(line)
输出:

foo='{"foo": "bar", "hello": "world"}' a=b c=d
{'a': 'b', 'c': 'd', 'foo': {u'foo': u'bar', u'hello': u'world'}}

找到了一个很酷的答案。使用json.JSONDecoder的scan_once函数

In [30]: import json

In [31]: d = json.JSONDecoder()

In [32]: my_string = 'key="{"foo":"bar"}"more_gibberish'

In [33]: d.scan_once(my_string, 5)
Out[33]: ({u'foo': u'bar'}, 18)

In [37]: my_string[18:]
Out[37]: '"more_gibberish'
小心点

In [38]: d.scan_once(my_string, 6)
Out[38]: (u'foo', 11)

JSON字符串的结尾是否恰好是
}“
?您的示例是否准确地表示了行的真实外观、引用样式以及所有内容?因为如果是这样的话,它实际上不是有效的json,无论你做什么,你都很难使用任何标准的json库来解析它。好主意,除了我们不知道下面的键是什么或者导致json字符串的键是什么。