Membaca nilai dari file Json

Saya mencoba membaca atribut dari file Json menggunakan ini: d['text']['entities']['mention'][0]['screen_name']

Berkas JSON

{
    "text" : {
        "content" : "@narendramodi Did u even know the fare of metro has been increased by 65%",

        "entities" : {
            "user_mentions" : [ ],
            "mention" : [
                {
                    "indices" : [
                        0,
                        13
                    ],
                    "id_str" : "18839785",
                    "screen_name" : "narendramodi",
                    "name" : "Narendra Modi",
                    "id" : 18839785
                }
            ],
            "hashtags" : [ ],
        },

    }
}

Saya mencoba memuat banyak file json di Database Neo4J menggunakan perpustakaan py2neo.

Saat mengakses d['text']['entities']['mention'][0]['screen_name'] di salah satu file json di mana bidang penyebutan "mention" : [ ], kosong, katanya

IndexError: daftar indeks di luar jangkauan

Kesalahannya cukup jelas tetapi bagaimana saya harus menanganinya?


person Aman Kumar    schedule 05.06.2017    source sumber
comment
Ini berfungsi sempurna di komputer saya (python 3.6), nilainya 'narendramodi' tanpa masalah.   -  person Ender Look    schedule 05.06.2017
comment
Ini juga berfungsi dengan baik untuk saya. Apakah hanya ini yang Anda miliki di file JSON? Saya menggunakan Python 2.7..   -  person Sagar Waghmode    schedule 05.06.2017
comment
Tampaknya ada ketidakcocokan antara json yang Anda posting dan json yang dibaca program Anda.   -  person cs95    schedule 05.06.2017
comment
Baru tahu masalah sebenarnya. Silakan lihat versi masalah yang telah diedit.   -  person Aman Kumar    schedule 05.06.2017


Jawaban (2)


Anda cukup menggunakan blok try/except. Menyukai

try:
  data = d['text']['entities']['mention'][0]['screen_name']
  ...
except IndexError:
  data = None # or handle this case in other way
person kvorobiev    schedule 05.06.2017
comment
@Aman Kumar Sama-sama) Jika jawaban saya bermanfaat, Anda dapat menandainya sebagai jawaban yang benar. - person kvorobiev; 05.06.2017

coba ini -

   mentions = d.get('text',{}).get('entities',{}).get('mention' ,[])
   if len(mentions)>0:
        print(mentions[0].get('screen_name',None))
   else:
        print(None)
person tom    schedule 05.06.2017
comment
string tidak akan menghasilkan IndexError: list index out of range. Selain itu, Anda tidak mengonversinya menjadi objek json, melainkan objek python. JSON adalah format serialisasi teks. - person juanpa.arrivillaga; 05.06.2017
comment
@ juanpa.arrivillaga, saya telah menguji kode ini dan berfungsi, sepertinya json salah dan ada beberapa ',' tambahan di json. - person tom; 05.06.2017
comment
Ya, saya tahu kodenya berfungsi, tetapi jawaban ini tidak mengatasi masalah OP, yaitu daftar yang memunculkan IndexError. Memang benar, kode dalam pertanyaan OP berfungsi, jadi jelas, ini bukan masalahnya. - person juanpa.arrivillaga; 05.06.2017
comment
Sekali lagi ini tidak ada hubungannya dengan kesalahan yang dialami OP, yang disebabkan oleh pengindeksan daftar di luar jangkauan. Ada kesalahan ketik pada data sampel yang disediakan OP, tapi itu bukan akar masalahnya. - person juanpa.arrivillaga; 05.06.2017
comment
Baru tahu masalah sebenarnya. Silakan lihat versi masalah yang telah diedit. - person Aman Kumar; 05.06.2017
comment
@juanpa.arrivillaga , bisakah kamu melihatnya sekarang ? terimakasih atas bantuannya! - person tom; 05.06.2017