Python json.loads shows ValueError: Extra data

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 open('new.json') as infile:
        data = json.load(infile)
    for item in data:
        iden = item.get["id"]
        a = item.get["a"]
        b = item.get["b"]
        c = item.get["c"]
        if c == 'XYZ' or  "XYZ" in data["text"]:
            filename = 'abc.json'
        try:
            outfile = open(filename,'ab')
        except:
            outfile = open(filename,'wb')
        obj_json={}
        obj_json["ID"] = iden
        obj_json["VAL_A"] = a
        obj_json["VAL_B"] = b

and I am getting an error, the traceback is:

      File "rtfav.py", line 3, in <module>
        data = json.load(infile)
      File "/usr/lib64/python2.7/json/__init__.py", line 278, in load
        **kw)
      File "/usr/lib64/python2.7/json/__init__.py", line 326, in loads
        return _default_decoder.decode(s)
      File "/usr/lib64/python2.7/json/decoder.py", line 369, in decode
        raise ValueError(errmsg("Extra data", s, end, len(s)))
    ValueError: Extra data: line 88 column 2 - line 50607 column 2 (char 3077 - 1868399)

Can someone help me?

Here is a sample of the data in new.json, there are about 1500 more such dictionaries in the file

    {
        "contributors": null, 
        "truncated": false, 
        "text": "@HomeShop18 #DreamJob to professional rafter", 
        "in_reply_to_status_id": null, 
        "id": 421584490452893696, 
        "favorite_count": 0, 
        "source": "<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Mobile Web (M2)</a>", 
        "retweeted": false, 
        "coordinates": null, 
        "entities": {
            "symbols": [], 
            "user_mentions": [
                {
                    "id": 183093247, 
                    "indices": [
                        0, 
                        11
                    ], 
                    "id_str": "183093247", 
                    "screen_name": "HomeShop18", 
                    "name": "HomeShop18"
                }
            ], 
            "hashtags": [
                {
                    "indices": [
                        12, 
                        21
                    ], 
                    "text": "DreamJob"
                }
            ], 
            "urls": []
        }, 
        "in_reply_to_screen_name": "HomeShop18", 
        "id_str": "421584490452893696", 
        "retweet_count": 0, 
        "in_reply_to_user_id": 183093247, 
        "favorited": false, 
        "user": {
            "follow_request_sent": null, 
            "profile_use_background_image": true, 
            "default_profile_image": false, 
            "id": 2254546045, 
            "verified": false, 
            "profile_image_url_https": "https://pbs.twimg.com/profile_images/413952088880594944/rcdr59OY_normal.jpeg", 
            "profile_sidebar_fill_color": "171106", 
            "profile_text_color": "8A7302", 
            "followers_count": 87, 
            "profile_sidebar_border_color": "BCB302", 
            "id_str": "2254546045", 
            "profile_background_color": "0F0A02", 
            "listed_count": 1, 
            "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", 
            "utc_offset": null, 
            "statuses_count": 9793, 
            "description": "Rafter. Rafting is what I do. Me aur mera Tablet.  Technocrat of Future", 
            "friends_count": 231, 
            "location": "", 
            "profile_link_color": "473623", 
            "profile_image_url": "http://pbs.twimg.com/profile_images/413952088880594944/rcdr59OY_normal.jpeg", 
            "following": null, 
            "geo_enabled": false, 
            "profile_banner_url": "https://pbs.twimg.com/profile_banners/2254546045/1388065343", 
            "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", 
            "name": "Jayy", 
            "lang": "en", 
            "profile_background_tile": false, 
            "favourites_count": 41, 
            "screen_name": "JzayyPsingh", 
            "notifications": null, 
            "url": null, 
            "created_at": "Fri Dec 20 05:46:00 +0000 2013", 
            "contributors_enabled": false, 
            "time_zone": null, 
            "protected": false, 
            "default_profile": false, 
            "is_translator": false
        }, 
        "geo": null, 
        "in_reply_to_user_id_str": "183093247", 
        "lang": "en", 
        "created_at": "Fri Jan 10 10:09:09 +0000 2014", 
        "filter_level": "medium", 
        "in_reply_to_status_id_str": null, 
        "place": null
    }

As you can see in the following example, json.loads (and json.load) does not decode multiple json object.

    >>> json.loads('{}')
    {}
    >>> json.loads('{}{}') # == json.loads(json.dumps({}) + json.dumps({}))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Python27\lib\json\__init__.py", line 338, in loads
        return _default_decoder.decode(s)
      File "C:\Python27\lib\json\decoder.py", line 368, in decode
        raise ValueError(errmsg("Extra data", s, end, len(s)))
    ValueError: Extra data: line 1 column 3 - line 1 column 5 (char 2 - 4)

If you want to dump multiple dictionaries, wrap them in a list, dump the list (instead of dumping dictionaries multiple times)

    >>> dict1 = {}
    >>> dict2 = {}
    >>> json.dumps([dict1, dict2])
    '[{}, {}]'
    >>> json.loads(json.dumps([dict1, dict2]))
    [{}, {}]

From: stackoverflow.com/q/21058935

Back to homepage or read more recommendations: