28

我想在 python 中将 JSONL 文件加载为 JSON 对象。有没有简单的方法可以做到这一点?

4

5 回答 5

42

完整的步骤,包括像我这样的初学者的文件操作

假设你有一个.jsonl像这样的文件:

{"reviewerID": "A2IBPI20UZIR0U", "asin": "1384719342", "reviewerName": "cassandra tu \"Yeah, well, that's just like, u...", "helpful": [0, 0], "reviewText": "Not much to write about here, but it does exactly what it's supposed to. filters out the pop sounds. now my recordings are much more crisp. it is one of the lowest prices pop filters on amazon so might as well buy it, they honestly work the same despite their pricing,", "overall": 5.0, "summary": "good", "unixReviewTime": 1393545600, "reviewTime": "02 28, 2014"}
{"reviewerID": "A14VAT5EAX3D9S", "asin": "1384719342", "reviewerName": "Jake", "helpful": [13, 14], "reviewText": "The product does exactly as it should and is quite affordable.I did not realized it was double screened until it arrived, so it was even better than I had expected.As an added bonus, one of the screens carries a small hint of the smell of an old grape candy I used to buy, so for reminiscent's sake, I cannot stop putting the pop filter next to my nose and smelling it after recording. :DIf you needed a pop filter, this will work just as well as the expensive ones, and it may even come with a pleasing aroma like mine did!Buy this product! :]", "overall": 5.0, "summary": "Jake", "unixReviewTime": 1363392000, "reviewTime": "03 16, 2013"}

此代码应该可以工作:

import json

with open('./data/my_filename.jsonl', 'r') as json_file:
    json_list = list(json_file)

for json_str in json_list:
    result = json.loads(json_str)
    print(f"result: {result}")
    print(isinstance(result, dict))

关于.jsonl文件:http:
//jsonlines.org/

于 2019-06-25T08:07:34.883 回答
20

分割线将为您解决该问题,因此通常以下代码将为您工作:

import json

result = [json.loads(jline) for jline in jsonl_content.splitlines()]

如果那是响应对象,结果将是:

result = [json.loads(jline) for jline in response.read().splitlines()]
于 2018-05-22T20:03:58.223 回答
15

将参数行设置为 True 应该可以解决问题。

import pandas as pd    
jsonObj = pd.read_json(path_or_buf=file_path, lines=True)
于 2020-11-19T10:19:58.253 回答
10

split()无需使用任何功能的快速简单的原生解决方案:

import json
with open('/path/to/file.jsonl') as f:
    data = [json.loads(line) for line in f]
于 2021-04-30T06:56:53.007 回答
0

您可以添加更多键,但这应该可以。说,每一行都是以下格式。基本上, j_line 是一个字典,可以像访问字典一样访问每个元素。我也共享访问嵌套对象。

{"key1":"value", "key2":{"prop_1":"value"}}

with open("foo.jsonl") as f1:
   for line in f1:
      j_line=json.loads(line)
      key_1=j_line['key1'] 
      prop_1=j_line['key2']['prop_2]
于 2021-04-27T01:58:48.847 回答