Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Regex_Json - Fatal编程技术网

Python 从嵌套JSON文档中提取值

Python 从嵌套JSON文档中提取值,python,regex,json,Python,Regex,Json,我有以下JSON结构。我试图从“brow_eventdetails”部分提取以下信息 时间 SBTime 时间 我的问题是,有没有简单的方法不用正则表达式就可以做到这一点。换句话说,我的问题是一种嵌套的JSON格式,我可以通过某种方式使用python提取它 { "AppName": "undefined", "Event": "browser information event", "Message": "

我有以下JSON结构。我试图从“brow_eventdetails”部分提取以下信息

  • 时间
  • SBTime
  • 时间
我的问题是,有没有简单的方法不用正则表达式就可以做到这一点。换句话说,我的问题是一种嵌套的JSON格式,我可以通过某种方式使用python提取它

       {
            "AppName": "undefined",
            "Event": "browser information event",
            "Message": "brow_eventdetails:{\"Message\":\"for https://mysite.myspace.com/display/CORE/mydetails took too long (821 ms : ATime: 5 ms, SBTime: 391 ms, CTime: 425 ms), and exceeded threshold of 5 ms\",\"Title\":\"mydetails My Work Details\",\"Host\":\"nzmyserver.ad.mydomain.com\",\"Page URL\":\"https://nzmyserver.mydomain.com/display/CORE/mydetails\",\"PL\":821,\"ATime\":5,\"SBTime\":391,\"CTime\":425}",
            "Severity": "warn",
            "UserInfo": "General Info"
        }
下面给出了我使用的程序

     with open(fname, 'r+') as f:
       json_data = json.load(f)
       message = json_data['Message']
         nt = message.split('ATime')[1].strip().split(':')[1].split(',')[0]
         bt = message.split('SBTime')[1].strip().split(':')[1].split('\s')[0])
         st = message.split('CTime')[1].strip().split(':')[1].split('\s')[0])
         json_data["ATime"] = bt
         json_data["SBTime"] = st
         json_data["CTime"] = nt
        f.seek(0)
        json.dump(json_data,f,ensure_ascii=True)
这个程序有一些问题。第一个问题是提取ATime、SBTime和CTime。这些值是重复的。我只想提取数字值,5,391和425。我不想让ms跟在后面。我如何才能做到这一点

如果我将程序更新为使用json.loads(),如下所示,则会出现以下错误

将open(fname,'r+')作为f: json_data=json.load(f) message=json_数据['message'] message_data=json.loads(message) f、 搜索(0) dump(json_数据,f,确保_ascii=True)

我明白了

ValueError: No JSON object could be decoded

使用json.loads解析此字符串值,就像解析其他包含json的字符串一样。

使用json.loads解析此字符串值,就像解析其他包含json的字符串一样。

您需要再次解析
json\u data['message']
的json字符串,然后只需访问所需的值,一种方法是:

# since the string value of `message` itself isn't a valid json string
# discard it, and parse it with json again
brow_eventdetails = json.loads(json_data['message'].replace('brow_eventdetails:', ''))

brow_eventdetails['ATime']
Out[6]: 5

brow_eventdetails['SBTime']
Out[7]: 391

brow_eventdetails['CTime']
Out[8]: 425

...

您需要再次解析
json_data['message']
的json字符串,然后只需访问所需的值,一种方法是:

# since the string value of `message` itself isn't a valid json string
# discard it, and parse it with json again
brow_eventdetails = json.loads(json_data['message'].replace('brow_eventdetails:', ''))

brow_eventdetails['ATime']
Out[6]: 5

brow_eventdetails['SBTime']
Out[7]: 391

brow_eventdetails['CTime']
Out[8]: 425

...

首先,您没有嵌套的json文档,该字段只是未赋值json字符串的字符串表示。首先修复此问题,然后停止使用
strip
split
@Anzel-修复它是什么意思?不使用字符串和拆分?消息的字段值当前为字符串。使用
strip
split
处理它就像处理字符串一样,不要@Anzel-替代方法是什么?您需要放弃
'brow_eventdetails:'
消息字符串
因为这不是一个有效的json字符串(字段名不带引号
),所以在执行
json.loads时它会失败。首先丢弃它,就像我使用
replace('brow_eventdetails:','')
,然后剩余的字符串
{…}
可以通过
json.loads进行解析。首先,您没有嵌套的json文档,该字段只是未赋值json字符串的字符串表示。首先修复此问题,然后停止使用
strip
split
@Anzel-修复它是什么意思?不使用字符串和拆分?消息的字段值当前为字符串。使用
strip
split
处理它就像处理字符串一样,不要@Anzel-替代方法是什么?您需要放弃
'brow_eventdetails:'
消息字符串
因为这不是一个有效的json字符串(字段名不带引号
),所以在执行
json.loads时它会失败。首先丢弃它,就像我使用
replace('brow_eventdetails:','')
,然后剩余的字符串
{…}
可以通过
json.loads进行解析。