【问题标题】:how to read json object in python [duplicate]如何在python中读取json对象[重复]
【发布时间】:2018-05-31 03:04:53
【问题描述】:

我有一个名为 "panamaleaks50k.json" 的 json 文件。我想从 json 文件中获取 ['text'] 字段,但它显示我出现以下错误

JSON 对象必须是 str、bytes 或 bytearray,而不是 'TextIOWrapper'

这是我的代码

with open('C:/Users/bilal butt/Desktop/PanamalEakJson.json','r') as lst:
    b = json.loads(lst)
    print(b['text'])

我的 json 文件外观

[
{
   "fullname": "Mohammad Fayyaz",
   "id": "885800668862263296",
   "likes": "0",
   "replies": "0",
   "retweets": "0",
   "text": "Love of NS has been shown in PanamaLeaks scandal verified by JIT...",
   "timestamp": "2017-07-14T09:58:31",
   "url": "/mohammadfayyaz/status/885800668862263296",
   "user": "mohammadfayyaz"
 },
{
  "fullname": "TeamPakistanPTI \u00ae",
  "id": "885800910357749761",
  "likes": "0",
  "replies": "0",
  "retweets": "0",
  "text": "RT ArsalanISF: #PanamaLeaks is just a start. U won't believe whr...",
  "timestamp": "2017-07-14T09:59:29",
  "url": "/PtiTeampakistan/status/885800910357749761",
  "user": "PtiTeampakistan"
 }
]

我如何阅读所有 ['text'] 和单个 ['text'] 字段?

【问题讨论】:

    标签: python json filereader


    【解决方案1】:

    如果您的输入是类似文件的对象(例如 TextIOWrapper),请使用 json.load(),而不是 json.loads()

    给定以下完整的复制器:

    import json, tempfile
    with tempfile.NamedTemporaryFile() as f:
        f.write(b'{"text": "success"}'); f.flush()
        with open(f.name,'r') as lst:
            b = json.load(lst)
            print(b['text'])
    

    ...输出为success

    【讨论】:

    • 标记社区 wiki 以避免从已知的骗子那里获得代表。人们应该随意编辑/修改,尽管链接的答案应该被认为更规范。
    • 我在使用 load() 函数时遇到了这个错误。 ` JSON 对象必须是 str、bytes 或 bytearray,而不是 'TextIOWrapper'`
    • @BilalButt, load() 不会产生该错误——与问题中的代码使用的loads() 不同,load() 接受类似文件的对象作为输入。如果您断言确实如此,请编辑您的问题以添加minimal reproducible example - 其他人可以运行的最短代码,无需修改,自己查看问题。 (现在缩进是错误的,除了你之外没有人会拥有一个C:\Users\bilal butt 目录,所以这不是其他人可以调用的代码)。
    • 感谢您的快速回复。我在我的问题中编辑 json 文件。
    • 文件的内容不相关——文件可能只包含[],错误将完全相同。因此,minimal 复制器不需要包含超过 [] 的任何内容作为被解析的文件内容(但 应该 实际上创建一个包含这些内容的文件,如果可以的话'没有一个就不能复制)。
    【解决方案2】:

    您应该将文件 contents(即字符串)传递给json.loads(),而不是文件对象本身。试试这个:

    with open(file_path) as f:
        data = json.loads(f.read())
        print(data[0]['text'])
    

    还有json.load() 函数,它接受一个文件对象并在后台为您执行f.read() 部分。

    【讨论】:

    • 一个字母 's' 的不同之处很有趣。恕我直言,这两种函数方法的命名应该在彼此之间更加引人注目。
    • @programmer dreamer s 表示这个解析的是一个字符串。
    • 完美,这对我有帮助。
    猜你喜欢
    • 2019-07-15
    • 2010-12-20
    • 2017-09-29
    • 2015-10-05
    • 1970-01-01
    • 2020-12-30
    • 2019-08-08
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多