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

如何使用python从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分为两部分

我有一个奇怪的原始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不够干净,无法直接工作。