Displaying better error message than “No JSON object could be decoded”

后端 未结 11 1010
既然无缘
既然无缘 2020-11-30 23:05

Python code to load data from some long complicated JSON file:

with open(filename, \"r\") as f:
  data = json.loads(f.read())

(note: the be

相关标签:
11条回答
  • 2020-11-30 23:43

    I've found that the simplejson module gives more descriptive errors in many cases where the built-in json module is vague. For instance, for the case of having a comma after the last item in a list:

    json.loads('[1,2,]')
    ....
    ValueError: No JSON object could be decoded
    

    which is not very descriptive. The same operation with simplejson:

    simplejson.loads('[1,2,]')
    ...
    simplejson.decoder.JSONDecodeError: Expecting object: line 1 column 5 (char 5)
    

    Much better! Likewise for other common errors like capitalizing True.

    0 讨论(0)
  • 2020-11-30 23:48

    For my particular version of this problem, I went ahead and searched the function declaration of load_json_file(path) within the packaging.py file, then smuggled a print line into it:

    def load_json_file(path):
        data = open(path, 'r').read()
        print data
        try:
            return Bunch(json.loads(data))
        except ValueError, e:
            raise MalformedJsonFileError('%s when reading "%s"' % (str(e),
                                                                   path))
    

    That way it would print the content of the json file before entering the try-catch, and that way – even with my barely existing Python knowledge – I was able to quickly figure out why my configuration couldn't read the json file.
    (It was because I had set up my text editor to write a UTF-8 BOM … stupid)

    Just mentioning this because, while maybe not a good answer to the OP's specific problem, this was a rather quick method in determining the source of a very oppressing bug. And I bet that many people will stumble upon this article who are searching a more verbose solution for a MalformedJsonFileError: No JSON object could be decoded when reading …. So that might help them.

    0 讨论(0)
  • 2020-11-30 23:48

    You could use cjson, that claims to be up to 250 times faster than pure-python implementations, given that you have "some long complicated JSON file" and you will probably need to run it several times (decoders fail and report the first error they encounter only).

    0 讨论(0)
  • 2020-11-30 23:53

    As to me, my json file is very large, when use common json in python it gets the above error.

    After install simplejson by sudo pip install simplejson.

    And then I solved it.

    import json
    import simplejson
    
    
    def test_parse_json():
        f_path = '/home/hello/_data.json'
        with open(f_path) as f:
            # j_data = json.load(f)      # ValueError: No JSON object could be decoded
            j_data = simplejson.load(f)  # right
        lst_img = j_data['images']['image']
        print lst_img[0]
    
    
    if __name__ == '__main__':
        test_parse_json()
    
    0 讨论(0)
  • 2020-11-30 23:58

    You wont be able to get python to tell you where the JSON is incorrect. You will need to use a linter online somewhere like this

    This will show you error in the JSON you are trying to decode.

    0 讨论(0)
  • 2020-12-01 00:00

    I had a similar problem this was my code:

        json_file=json.dumps(pyJson)
        file = open("list.json",'w')
        file.write(json_file)  
    
        json_file = open("list.json","r")
        json_decoded = json.load(json_file)
        print json_decoded
    

    the problem was i had forgotten to file.close() I did it and fixed the problem.

    0 讨论(0)
提交回复
热议问题