Как я могу извлечь элементы внутренней строки из json, используя python? - PullRequest
1 голос
/ 30 апреля 2020

У меня есть этот странный необработанный 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}]}]}"
}

И я хочу получить доступ и извлечь внутренние элементы, такие как t, v из образцов, используя Python.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Вы можете сначала очистить json, используя regex. Для очистки я делю json на две части url_data and download_data.

Первый шаг - удалить ненужные двойные кавычки из download_data, это регулярное выражение re.sub('"', '', data[data.index(',') + 1 :]) удаляет двойные кавычки.

Далее добавьте двойные кавычки к словам, используя регулярное выражение re.sub("(\w+):", r'"\1":', download_data), это добавит двойные кавычки вокруг всех слов в 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]
0 голосов
/ 30 апреля 2020

Здесь основная проблема, которую я увидел, состоит в том, что значение в 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
###############
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...