Как создать словарь Python (ключ: значение) из выбранных объектов в файле JSON с несколькими строками JSON

1

У меня есть файл с несколькими линиями JSON, как показано ниже.

{"status str":null,"id":563221, "filter":"low","text" : "Grass is green"}
{"status str":null,"id":612835, "filter":"high","text" : "Textual blue"}

Мой желаемый результат должен показывать только идентификационный номер, а "Трава зеленая" - как пара [ключ: значение], как в словарях в Python:

563221: "Трава зеленая"

612835: "Текстовый синий"

В настоящее время я использую ObjectPath для запроса. Используя кортежи, я могу выводить все данные, но я не могу выбирать разделы данных. Ниже приведен код, который я использую.

read_data = []
with open(fileName, 'r') as file_to_read:
    for line in filetoread:
        json_tree = objectpath.Tree(read_data)
        dict = {tuple(json_tree.execute('$.id')) : tuple(json_tree.execute('$.text'))}
        line = next(filetoread)
return dict
Теги:
dictionary
objectpath

3 ответа

0
Лучший ответ

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

import json

dict = {}
with open(fileName, 'r') as file_to_read:
    for line in filetoread:
        json_line = json.loads(line)
        dict[json_line['id']] = json_line['text']
return dict

json.loads(json_string) преобразует строку в json_string в json.

0

Я думаю, что использование объектного пути не нужно. Вы можете сделать это очень простым способом благодаря пакету json.

Содержание data.json:

{"status str":null,"id":563221, "filter":"low","text" : "Grass is green"}
{"status str":null,"id":612835, "filter":"high","text" : "Textual blue"}

код:

import json

file_name = "data.json"

with open(file_name, 'r') as file_to_read:
    for line in file_to_read:
        json_object = json.loads(line)
        dictionary = {json_object["id"]: json_object["text"]}

print(dictionary)

Выход:

{563221: 'Grass is green'}
{612835: 'Textual blue'}
0

Ты почти понял это. Вы должны сначала десериализовать свой json, используя функцию json.loads, а затем передать его objectpath.Tree.

Например:

import json
import objectpath

data = [
  '{"status str":null,"id":563221, "filter":"low","text" : "Grass is green"}',
  '{"status str":null,"id":612835, "filter":"high","text" : "Textual blue"}'
]

for line in data: 
    jt = objectpath.Tree(json.loads(line))
    d = {jt.execute('$.id') : jt.execute('$.text')} 
    print(d)

приводит к

{563221: 'Grass is green'}
{612835: 'Textual blue'}

И именование переменной dict это не очень хорошая идея, потому что вы отменяете питон встроенного класса dict.

Применение этого кода приводит к

read_data = [] 
with open(fileName, 'r') as file_to_read:
    for line in file_to_read:
        json_tree = objectpath.Tree(json.loads(line))
        read_data.append({json_tree.execute('$.id') : json_tree.execute('$.text')})

print(read_data)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню