如何使用python从json中提取内部字符串元素?
我有一个奇怪的原始JSON输入:如何使用python从json中提取内部字符串元素?,python,json,structure,Python,Json,Structure,我有一个奇怪的原始JSON输入: { "URL_IN": "http://localhost/", "DownloadData": "{\"data\":[{samples:[{t:1586826385724,v:5.000e+000,l:0,s:-1,V:-1},{t:1587576460460,v:0.000e+000,l:0,s:-1,V:-1}]}]}" } 我想使用Python从示例中访问和提取内部元素,如t,v。您可以首先使用regex清除json。为了清理,我将json分为两部分
{
"URL_IN": "http://localhost/",
"DownloadData": "{\"data\":[{samples:[{t:1586826385724,v:5.000e+000,l:0,s:-1,V:-1},{t:1587576460460,v:0.000e+000,l:0,s:-1,V:-1}]}]}"
}
我想使用Python从示例中访问和提取内部元素,如
t
,v
。您可以首先使用regex
清除json。为了清理,我将json分为两部分url\u数据和下载\u数据
第一步从download_data
此正则表达式中删除不必要的双引号re.sub(''','',data[data.index(',')+1:])
删除双引号
接下来,使用正则表达式re.sub(“(\w+”,r''\1:”)将双引号添加到单词中,下载\u数据)
这将在json中的所有单词周围添加双引号
import re
import json
data = '{"URL_IN": "http://localhost/","DownloadData": "{\"data\":[{samples:[{t:1586826385724,v:5.000e+000,l:0,s:-1,V:-1},{t:1587576460460,v:0.000e+000,l:0,s:-1,V:-1}]}]}"}'
url_data = data[:data.index(',') + 1]
download_data = re.sub('"', '', data[data.index(',') + 1 :])
data = url_data + re.sub("(\w+):", r'"\1":', download_data)
data = json.loads(data)
res = [(x['t'], x['v']) for x in data['DownloadData']['data'][0]['samples']]
t, v = map(list, zip(*res))
print(t, v)
输出:
[1586826385724, 1587576460460] [5.0, 0.0]
这里我看到的主要问题是
DownloadData
中的值不是json格式,因此需要将其设置为json
代码
a={ "URL_IN": "http://localhost/", "DownloadData": "{\"data\":[{samples:[{t:1586826385724,v:5.000e+000,l:0,s:-1,V:-1},{t:1587576460460,v:0.000e+000,l:0,s:-1,V:-1}]}]}" }
i = a['DownloadData']
#converting string to json
i = i.replace("{",'{"').replace("}",'"}').replace(":",'":"').replace(",",'","')
i = i.replace("\"\"",'\"').replace("\"[",'[').replace("\"]",']').replace("\"{",'{').replace("\"}",'}')
i = i.replace("}]}]}","\"}]}]}")
i = i.replace("}\"","\"}")
final_dictionary = json.loads(i)
for k in final_dictionary['data'][0]['samples']:
print("t = ",k['t'])
print("v = ",k['v'])
print("l = ",k['l'])
print("s = ",k['s'])
print("V = ",k['V'])
print("###############")
输出
t = 1586826385724
v = 5.000e+000
l = 0
s = -1
V = -1
###############
t = 1587576460460
v = 0.000e+000
l = 0
s = -1
V = -1
###############
你想要t,v…,对吗?是的@vishalupadhyayth太完美了!非常感谢你。嘿,Vishal!谢谢你的解决方案。是的,问题是json不够干净,无法直接工作。