如何在python中读取json对象[重复]

Posted

技术标签:

【中文标题】如何在python中读取json对象[重复]【英文标题】:how to read json object in python [duplicate] 【发布时间】: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'] 字段?

【问题讨论】:

【参考方案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 表示这个解析的是一个字符串。 完美,这对我有帮助。

以上是关于如何在python中读取json对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 3.3 中读取 JSON 文件的异常行为 [重复]

如何使用 JSON 数据递归填充 TreeView

我如何在python中读取JSON对象?

如何从 XCUITest 读取 Json 文件?

javascript的JSON对象

Python JSON