У меня есть файл с несколькими линиями 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
Вы должны использовать библиотеку 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.
Я думаю, что использование объектного пути не нужно. Вы можете сделать это очень простым способом благодаря пакету 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'}
Ты почти понял это. Вы должны сначала десериализовать свой 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)