如何从具有多个 JSON 行的 JSON 文件中的 select 个对象创建 python 字典(键:值)
How can one create a python dictionary (key : value) from select objects in a JSON file with multiple JSON lines
我有一个包含多个 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 : "Grass is green"
612835 : "Textual blue"
我目前正在使用ObjectPath 进行查询。使用元组,我可以输出所有数据,但不能输出 select 部分数据。下面是我正在使用的代码。
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.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 内置的 class 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)
我认为没有必要使用对象路径。多亏了 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 然后轻松提取您需要的数据。
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 行的文件,如下所示。
{"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 : "Grass is green"
612835 : "Textual blue"
我目前正在使用ObjectPath 进行查询。使用元组,我可以输出所有数据,但不能输出 select 部分数据。下面是我正在使用的代码。
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.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 内置的 class 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)
我认为没有必要使用对象路径。多亏了 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 然后轻松提取您需要的数据。
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.