【问题标题】:Read JSON Lines file as String in Python在 Python 中将 JSON 行文件作为字符串读取
【发布时间】:2022-01-06 03:40:10
【问题描述】:

我有一个 JSON Lines 文件,我想在 Python 中将其读取为字符串。该文件包含多个这种格式的 JSON 对象:

{"Data1": "Value1"}
{"Data2": "Value2"}
{"Data3": "Value3"}

我在 Python 中尝试了以下代码,但它返回了错误。我能够使用lines = [] 将文件加载为字典列表,但显然它不适用于字符串。如何将整个文件读取为字符串?

import json

lines = ''

with open('file.json', 'r') as f:
    for line in f:
        lines.append(json.loads(line))

【问题讨论】:

  • 请在您的问题中分享links.jl(或至少是其中的相关部分)的内容。
  • 你可以试试f.read()
  • 您能用您自己的话解释一下您认为json.loads() 做了什么吗?为什么要尝试加载单行 JSON(这应该会失败,因为单行不一定是语法有效的 JSON),然后将结果对象附加到字符串?为什么不直接使用readlines() 读取整个文件,然后在结果字符串上使用json.loads() 将其序列化为Python 数据结构?我真的不清楚你从哪里得到这种方法应该起作用的想法 - 你可以链接到你在这里尝试的示例或文档吗?
  • 然后加载一次字符串,例如:json_str=‘[‘ + f.read().replace(‘\n’, ‘,\n’) + ‘]’; json.loads(json_str)
  • @esqew 很好,他提到它是 jsonl 格式,其中每一行基本上都是有效的地图类型。我的意思是它作为一个整体不是有效的 jaon,因为大概文件中没有左大括号 []。

标签: python json jsonlines


【解决方案1】:

如果您不担心大文件的内存使用情况,您可以简单地使用f.read(),否则您的实现看起来不错,除了您尝试将append() 与字符串一起使用的部分。这可以通过简单的修改来实现

lines = ""
with open("links.jl", "r") as f:
    for line in f:
        lines += line

【讨论】:

  • 这成功了!你能解释一下lines += line 在做什么吗?
  • 两个操作数如果是整数则相加,如果是字符串则将它们连接起来,并将结果分配给左侧操作数,也可以写成lines = lines + line
【解决方案2】:

您可以使用以下模板将您的 JSON 字符串加载到 DataFram 中

import pandas as pd
df = pd.read_json (r'C:\Users\Ron\Desktop\data.json')
print (df)

【讨论】:

    【解决方案3】:

    JSON Lines 文档作为字符串读取的最佳方法是使用read() 函数,如下所示:

    with open("file.json", "r") as file:
        data_str = file.read()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2016-11-07
      • 1970-01-01
      • 2016-06-02
      相关资源
      最近更新 更多