Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从包含多行JSON的JSON文件中的select对象创建python字典(key:value)_Python_Json_Dictionary_Objectpath - Fatal编程技术网

如何从包含多行JSON的JSON文件中的select对象创建python字典(key:value)

如何从包含多行JSON的JSON文件中的select对象创建python字典(key:value),python,json,dictionary,objectpath,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:“草是绿色的” 6128

我有一个包含多行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

你差点就成功了。您需要首先使用函数反序列化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)

我认为没有必要使用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"}
代码:

输出:

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

您应该使用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
loads(json_字符串)将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