如何使用多个JSON行从JSON文件中的选择对象创建python字典(键:值)

时间:2018-09-24 14:27:34

标签: python json dictionary objectpath

我有一个包含多个JSON行的文件,如下所示。

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

我想要的输出应该只显示ID号,并且“ Grass is green”作为[key:value]对显示,就像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 :(得分:1)

您几乎明白了。您需要先使用json.loads函数反序列化json,然后将其传递给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)

答案 1 :(得分: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'}

答案 2 :(得分: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。