Преобразовать пару ключей из списка словарей Python в файл JSON - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть JSON-файл со списком словарей, который я пытаюсь извлечь из каждого словаря по одному конкретному ключу и его значению и записать их в файл обратно в формат JSON.

В моем коде сейчас я перебираю словари и добавляю их вместе в файл json. Я вручную создаю формат JSON, но значения ключей записываются в виде строки. Я подозреваю, что это как-то связано с моей функцией dump (s). Но есть ли более эффективный способ прямого преобразования моих значений ключей из словарей python в словари json?

Вот мой текущий вывод:

{
    "text: red"            #returns a string
},
{
    "text: yellow"
},
{
    "text: blue"
}

Это мой ожидаемый результат:

{
    "text": "red"        #returns json formatted key-value pair
},
{
    "text": "yellow"
},
{
    "text": "blue"
}

Мой текущий код:

with open(join(dirname(__file__),'text.json')) as tone_json:
python_obj = json.load(tone_json)          #read file object into string
my_list = python_obj["data"]               #assign list name to string
for dictionary in my_list:                 #loop through dictionaries in list
    for key,value in dictionary.items():   #loop through key pairs in dictionaries
        if key == "text":
            with open('comments.json', 'a') as f:            #append each pair
                f.write("{\n") .                             #write key pair objects as json formatted stream to json file
                json.dump("{}: {}".format(key,value), f)     #format key-values
                f.write("\n},\n")

Мой текущий список словарей как "text.json":

{ 
    "data": [
    {
    "text": "red",
    "created_time": "2017-12-05",
    "comment_count": 31,
    "like_count": 43,
    "id": "10155952999xxxxx"
    },
    {
    "text": "yellow",
    "created_time": "2017-09-09",
    "comment_count": 4,
    "like_count": 876,
    "id": "10155952999xxxxxx"
    },
    {
    "text": "blue",
    "created_time": "2017-05-01",
    "comment_count": 15,
    "like_count": 6,
    "id": "10155952999xxxxxx"
    }
    ]
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я новичок, когда дело доходит до JSON, поэтому могу ошибаться ...

Но может ли простое изменение в том, как реализованы цитаты, решить эту проблему с вашим текущим кодом?

json.dump('"{}": "{}"'.format(key,value), f)

Любые отзывы будут оценены. Я тоже учусь.

0 голосов
/ 26 апреля 2018

Вы обдумываете решение. Вы можете сократить его до простого понимания списка:

with open(join(dirname(__file__),'text.json')) as tone_json:
    j = json.load(tone_json)
    out = [{'text': d.get('text', 'none')} for d in j.get('data', [])]

with open('comments.json', 'a') as f:
    json.dump(out, f, indent=2)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...