Как JSON проанализировать вывод Python и сохранить его значения, как в dict или переменных? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть код Python, который выводит JSON

import json 
from faker import Faker
import random
from random import randint
import subprocess
fake = Faker('en_US')

for _ in range(1):
sms =  {
        "name": fake.name(),
        "email": fake.email(),          
        "location": "usa"
        }

with open('abc.json', 'w') as outfile:
    json.dump(sms, outfile)

print(sms)

подпроцесс:

x=subprocess.Popen([" python"," first.py"],shell=True, stdout=subprocess.PIPE)
output = x.communicate()
print(output)

вывод получаю:

(b'{\n  "name": "elmoroy",\n  "email":"ssbyt@gmail.com"}\n', None)

вывод мне нужен:

{
"name": "elmoroy",
"email":"ssbyt@gmail.com
}

Если я позвоню output["name"], он должен вернуть elmoroy.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

connect () возвращает кортеж (stdout_data, stderr_data), вам нужен вывод в output[0], который является строковым представлением словаря, который вам нужен, затем вы можете использовать my_dict = json.loads(output[0]) для получения словаря.

ОБНОВЛЕНИЕ: чтобы выполнить это в цикле

my_dict = {}
for i in range(20):
    x=subprocess.Popen([" python"," first.py"],shell=True, stdout=subprocess.PIPE)
    output = x.communicate()
    my_dict.update({i: json.loads(output[0])})

my_dict будет содержать 20 словарей печатной переменной sms

0 голосов
/ 20 июня 2019

Возможно, вам следует попробовать использовать json.load, например:

with open('abc.json') as in_file:
    obj = json.load(in_file)
print(obj)

См. «Декодирование JSON» в json - кодер и декодер JSON :

--- edit ---

Попробуйте это:

Сначала вы получите файл вроде:

import json

for _ in range(1):
    sms =  {
            "name": 'some name',
            "email": 'some email',
            "location": "usa"
    }


with open('abc.json', 'w') as outfile:
    json.dump(sms, outfile)

Затем вы получите другой файл, например:

import json

with open('abc.json') as in_file:
    sms = json.load(in_file)
print(sms)

Выполните первый файл, а затем второй, и вы увидите, что второй файл анализирует содержимое файла в объект json.

...