添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams can't read json file with python. getting type error: json object is 'TextIOWrapper' (3 answers)
Closed 5 years ago .

I have json file named "panamaleaks50k.json". I want to get ['text'] field from the json file but it shows me following error

the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'

this is my code

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

my json file look

"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"

how I can read all ['text'] and just single ['text'] field?

You should pass the file contents (i.e. a string) to json.loads(), not the file object itself. Try this:

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

There's also the json.load() function which accepts a file object and does the f.read() part for you under the hood.

it's amusing how a single letter 's' makes the difference. IMHO these 2 function methods naming should've been more notable between one another. – programmer dreamer Apr 30, 2020 at 7:01

Use json.load(), not json.loads(), if your input is a file-like object (such as a TextIOWrapper).

Given the following complete reproducer:

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'])

...the output is success.

Flagged community-wiki to avoid harvesting rep from a known dupe. Folks should feel free to edit/amend, though the linked answer should be considered more canonical. – Charles Duffy Dec 17, 2017 at 16:51 i got this error by using load() funciton. ` the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'` – Bilal Butt Dec 17, 2017 at 16:53 @BilalButt, load() does not generate that error -- unlike loads(), which the code in the question uses, load() accepts file-like objects as input. If you assert that it does, edit your question to add a minimal reproducible example -- the shortest possible code someone else can run, without modifications, to see the problem themselves. (Right now the indentation is wrong, and nobody but you will have a C:\Users\bilal butt directory, so this isn't code other people can invoke). – Charles Duffy Dec 17, 2017 at 16:56 The contents of the file aren't relevant -- the file could just contain [] and the error would be exactly the same. Thus, a minimal reproducer has no need to include anything more than [] as the file contents being parsed (but should actually create a file with those contents, if it can't be reproduced without one). – Charles Duffy Dec 17, 2017 at 19:01