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

I'm trying to read a json and get its values. I have a folder with the JSON's archives, and I need to open all archives and get the values from them.

This is the code:

# -*- encoding: utf-8 -*-
from pprint import pprint
import json
import os 
def start():
    for dirname, dirnames, filenames in os.walk('test'):
        for filename in filenames:
            json_file = open(os.path.join(dirname, filename)).read()
            # json_file = unicode(json_file, 'utf-8')
            json_data = json.loads(json_file)
           pprint(json_data)
            for key, value in json_data.items():
                print "KEY : ", key
                print "VALUE: ", value
                start()

This is one of the JSON's

{ "test" : "Search User 1",
   "url"  : "http://127.0.0.1:8000/api/v1/user/1/?format=json",
   "status_code" : 200,
   "method" : "get"

But when I run it, i get this:

ValueError: No JSON object could be decoded

What the hell is wrong? Yesterday it was working exactly as it is now, or am I crazy

I tried this way:

from pprint import pprint
import json
import os
for dirname, dirnames, filenames in os.walk('test'):
    for filename in filenames:
        json_file_contents = open(os.path.join(dirname, filename)).read()
            json_data = json.loads(json_file_contents)
        except ValueError, e:
            print e
            print "ERROR"

I cant see any error '-'

for filename in filenames:
        with open(os.path.join(dirname,filename)) as fd:
            json_data = fd.read()
            print json_data

This way I can see what the json files contain, but I can't use for example access by the key, like json_data['url']

you should rename "json_file" to "json_file_contents" or something similar. It's confusing. More important though: put a try: except ValueError around the json.loads-statement, and print out the actual contents of the file. – deets Nov 7, 2014 at 19:42 The JSON you posted is valid but make sure you print each JSON before loading it. There may be at least one JSON file that is invalid. – Simeon Visser Nov 7, 2014 at 20:23

For me it was an encoding problem, you can try using Notepad++ to edit your .json file and change the Encoding to UTF-8 without BOM. Another thing you could check is if your json script is valid

It's possible the .read() method is moving the cursor to the end of the file. Try:

for filename in filenames:
    with open(os.path.join(dirname,filename)) as fd:
        json_data = json.load(fd)

and see where that gets you.

This, of course, assumes you have valid JSON, as your example demonstrates. (Look out for trailing commas)

You're sure it's valid JSON? jsonlint.com What is the string? And my bad; try json.load instead of json.loads? – Curtis Mattoon Nov 7, 2014 at 21:00 Yep, worked for me. I was doing a simple test read before parsing text_data = file.read(data_file) print text_data so I could dump the source to the console and that put me at the end of the file for the json.load – MountainLogic Feb 6, 2017 at 22:13 json.load accepts a file descriptor and json.loads accepts a string (hence the "s"): docs.python.org/2/library/json.html – Curtis Mattoon Sep 26, 2017 at 20:58

I resolved this error by Converting the json file to UTF-8 with no BOM. Below is a python snippet and url for conversion

myFile=open(cases2.json, 'r')
myObject=myFile.read()
u = myObject.decode('utf-8-sig')
myObject = u.encode('utf-8')
myFile.encoding
myFile.close()
myData=json.loads(myObject,'utf-8')

The reply suggesting that .read() was moving the cursor led to a resolution of my version of the problem. I changed

print response.read()
json_data = json.loads(response.read())
responseStr = response.read()
print responseStr
json_data = json.loads(responseStr)

I had the same problem today. Trying to understand the cause, I found this issue related to json module:

http://bugs.python.org/issue18958

Check if the file is UTF8 encoded and if it is the case, then use codecs module to open and read it or just skip the BOM (byte order mark).

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.