1

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

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

我想要的输出应该只显示 ID 号和“草是绿色的”作为 [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
4

3 回答 3

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)
于 2018-09-24T14:37:54.970 回答
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。

于 2018-09-24T14:48:39.450 回答
0

我认为使用 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'}
于 2018-09-24T14:42:22.730 回答