Python json.loads shows ValueError: Extra data

后端 未结 9 928
甜味超标
甜味超标 2020-11-22 16:21

I am getting some data from a JSON file \"new.json\", and I want to filter some data and store it into a new JSON file. Here is my code:

import json
with ope         


        
9条回答
  •  醉酒成梦
    2020-11-22 16:34

    This may also happen if your JSON file is not just 1 JSON record. A JSON record looks like this:

    [{"some data": value, "next key": "another value"}]
    

    It opens and closes with a bracket [ ], within the brackets are the braces { }. There can be many pairs of braces, but it all ends with a close bracket ]. If your json file contains more than one of those:

    [{"some data": value, "next key": "another value"}]
    [{"2nd record data": value, "2nd record key": "another value"}]
    

    then loads() will fail.

    I verified this with my own file that was failing.

    import json
    
    guestFile = open("1_guests.json",'r')
    guestData = guestFile.read()
    guestFile.close()
    gdfJson = json.loads(guestData)
    

    This works because 1_guests.json has one record []. The original file I was using all_guests.json had 6 records separated by newline. I deleted 5 records, (which I already checked to be bookended by brackets) and saved the file under a new name. Then the loads statement worked.

    Error was

       raise ValueError(errmsg("Extra data", s, end, len(s)))
    ValueError: Extra data: line 2 column 1 - line 10 column 1 (char 261900 - 6964758)
    

    PS. I use the word record, but that's not the official name. Also, if your file has newline characters like mine, you can loop through it to loads() one record at a time into a json variable.

提交回复
热议问题