Как создать словарь Python (ключ: значение) из выбранных объектов в файле JSON с несколькими строками JSON - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть файл с несколькими строками 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

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Я думаю, что использование objectpath не нужно.Вы можете сделать это очень простым способом благодаря пакету 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 голосов
/ 24 сентября 2018

Вы должны использовать библиотеку 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 голосов
/ 24 сентября 2018

Ты почти понял.Сначала необходимо десериализовать ваш 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 не очень хорошая идея, потому что вы переопределите встроенный Python-в классе 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)
...