JSON (JavaScript Object Notation), ditentukan oleh RFC 7159 (yang menggantikan RFC 4627) dan oleh ECMA-404, adalah format pertukaran data ringan yang terinspirasi oleh sintaks literal objek JavaScript (walaupun ini bukan bagian yang ketat dari JavaScript ) Show
Peringatan Berhati-hatilah saat mem-parsing data JSON dari sumber yang tidak tepercaya. String JSON yang berbahaya dapat menyebabkan dekoder menghabiskan banyak sumber daya CPU dan memori. Membatasi ukuran data yang akan diuraikan dianjurkan memaparkan API yang familier bagi pengguna pustaka dan modul standar Mengkodekan hierarki objek Python dasar >>> import json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' >>> print(json.dumps("\"foo\bar")) "\"foo\bar" >>> print(json.dumps('\u1234')) "\u1234" >>> print(json.dumps('\\')) "\\" >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)) {"a": 0, "b": 0, "c": 0} >>> from io import StringIO >>> io = StringIO() >>> json.dump(['streaming API'], io) >>> io.getvalue() '["streaming API"]' Pengodean ringkas >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'_ Percetakan cantik >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 } Mendekode JSON >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API'] Mengkhususkan decoding objek JSON >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')_ Memperpanjang >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']'] Menggunakan dari shell untuk memvalidasi dan mencetak cantik $ echo '{"json":"obj"}' | python -m json.tool { "json": "obj" } $ echo '{1.2:3.4}' | python -m json.tool Expecting property name enclosed in double quotes: line 1 column 2 (char 1)_ Lihat untuk dokumentasi terperinci Catatan JSON adalah bagian dari YAML 1. 2. JSON yang dihasilkan oleh pengaturan default modul ini (khususnya, nilai pemisah default) juga merupakan subset dari YAML 1. 0 dan 1. 1. Modul ini juga dapat digunakan sebagai serializer YAML Catatan Encoder dan decoder modul ini mempertahankan urutan input dan output secara default. Pesanan hanya hilang jika wadah yang mendasarinya tidak diurutkan Penggunaan Dasarjson. dump(obj , fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)Serialisasi obj sebagai aliran berformat JSON ke fp (mendukung >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }0) menggunakan ini Jika skipkeys benar (default. >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }1), maka kunci dict yang bukan tipe dasar (, , , , >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6) akan dilewati alih-alih menaikkan a Modul selalu menghasilkan objek, bukan objek. Oleh karena itu, >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API']_1 harus mendukung masukan Jika sure_ascii benar (default), keluaran dijamin akan membuat semua karakter non-ASCII yang masuk lolos. Jika sure_ascii salah, karakter ini akan ditampilkan apa adanya Jika check_circular salah (default. >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API']3), maka pemeriksaan referensi melingkar untuk jenis wadah akan dilewati dan referensi melingkar akan menghasilkan (atau lebih buruk) Jika allow_nan salah (default. >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API']3), maka itu akan menjadi serialisasi di luar nilai rentang ( >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API']8, >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API']9, >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')0) sesuai ketat dengan spesifikasi JSON. Jika allow_nan benar, padanan JavaScriptnya ( >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')1, >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')2, >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')3) akan digunakan Jika indent adalah bilangan bulat atau string non-negatif, maka elemen array JSON dan anggota objek akan dicetak cantik dengan tingkat indentasi tersebut. Tingkat indentasi 0, negatif, atau >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')4 hanya akan menyisipkan baris baru. >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6 (default) memilih representasi yang paling ringkas. Menggunakan indentasi bilangan bulat positif yang banyak ruang per tingkat. Jika indentasi berupa string (seperti >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')6), string tersebut digunakan untuk mengindentasi setiap level Berubah di versi 3. 2. Izinkan string untuk indentasi selain bilangan bulat. Jika ditentukan, pemisah harus berupa tuple ________4______7. Standarnya adalah >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')8 jika inden adalah >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6 dan >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']0 sebaliknya. Untuk mendapatkan representasi JSON yang paling ringkas, Anda harus menentukan >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']1 untuk menghilangkan spasi Berubah di versi 3. 4. Gunakan >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']0 sebagai default jika indent bukan >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6. Jika ditentukan, default harus berupa fungsi yang dipanggil untuk objek yang tidak dapat diserialisasi. Itu harus mengembalikan versi objek yang dapat dikodekan JSON atau menaikkan a. Jika tidak ditentukan, dinaikkan Jika sort_keys benar (default. >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }1), maka keluaran kamus akan diurutkan berdasarkan kunci Untuk menggunakan subkelas khusus (mis. g. salah satu yang menggantikan metode >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']_8 untuk membuat cerita bersambung jenis tambahan), tentukan dengan cls kwarg; Berubah di versi 3. 6. Semua parameter opsional sekarang. Catatan Tidak seperti and , JSON bukan protokol berbingkai, jadi mencoba membuat serial beberapa objek dengan panggilan berulang menggunakan fp yang sama akan menghasilkan file JSON yang tidak valid json. pembuangan(obj , *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)Serialkan obj ke JSON yang diformat menggunakan ini. Argumen memiliki arti yang sama seperti di Catatan Kunci dalam pasangan kunci/nilai JSON selalu bertipe. Saat kamus diubah menjadi JSON, semua kunci kamus dipaksa menjadi string. Akibatnya, jika kamus diubah menjadi JSON dan kemudian kembali menjadi kamus, kamus tersebut mungkin tidak sama dengan yang asli. Artinya, $ echo '{"json":"obj"}' | python -m json.tool { "json": "obj" } $ echo '{1.2:3.4}' | python -m json.tool Expecting property name enclosed in double quotes: line 1 column 2 (char 1)6 jika x memiliki kunci non-stringjson. memuat(fp , *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) Deserialize fp (a $ echo '{"json":"obj"}' | python -m json.tool { "json": "obj" } $ echo '{1.2:3.4}' | python -m json.tool Expecting property name enclosed in double quotes: line 1 column 2 (char 1)_7-mendukung atau berisi dokumen JSON) ke objek Python menggunakan ini object_hook adalah fungsi opsional yang akan dipanggil dengan hasil dari dekode literal objek apa pun (a ). Nilai pengembalian object_hook akan digunakan sebagai pengganti. Fitur ini dapat digunakan untuk mengimplementasikan dekoder khusus (mis. g. Petunjuk kelas JSON-RPC) object_pairs_hook adalah fungsi opsional yang akan dipanggil dengan hasil dari setiap literal objek yang didekodekan dengan daftar pasangan yang diurutkan. Nilai pengembalian object_pairs_hook akan digunakan sebagai pengganti. Fitur ini dapat digunakan untuk mengimplementasikan decoder kustom. Jika object_hook juga ditentukan, object_pairs_hook diprioritaskan Berubah di versi 3. 1. Menambahkan dukungan untuk object_pairs_hook. parse_float, jika ditentukan, akan dipanggil dengan string dari setiap float JSON yang akan didekodekan. Secara default, ini setara dengan def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)1. Ini dapat digunakan untuk menggunakan tipe data atau parser lain untuk float JSON (mis. g. ) parse_int, jika ditentukan, akan dipanggil dengan string dari setiap int JSON yang akan didekodekan. Secara default, ini setara dengan def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)3. Ini dapat digunakan untuk menggunakan tipe data atau parser lain untuk bilangan bulat JSON (mis. g. ) Berubah di versi 3. 11. Parse_int default sekarang membatasi panjang maksimum string bilangan bulat melalui juru bahasa untuk membantu menghindari penolakan serangan layanan. parse_constant, jika ditentukan, akan dipanggil dengan salah satu string berikut. def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)6, def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)7, def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)8. Ini dapat digunakan untuk memunculkan pengecualian jika nomor JSON yang tidak valid ditemukan Berubah di versi 3. 1. parse_constant tidak lagi dipanggil pada 'null', 'true', 'false'. Untuk menggunakan subkelas khusus, tentukan dengan >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]}) '{"foo": ["bar", "baz"]}'0 kwarg; . Argumen kata kunci tambahan akan diteruskan ke konstruktor kelas Jika data yang dideserialisasi bukan dokumen JSON yang valid, a akan dimunculkan Berubah di versi 3. 6. Semua parameter opsional sekarang. Berubah di versi 3. 6. fp sekarang bisa menjadi a. Pengkodean masukan harus UTF-8, UTF-16 atau UTF-32. json. memuat(s , *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)Deserialisasi s (a , atau instance yang berisi dokumen JSON) ke objek Python menggunakan ini Argumen lain memiliki arti yang sama seperti di Jika data yang dideserialisasi bukan dokumen JSON yang valid, a akan dimunculkan Berubah di versi 3. 6. s sekarang bisa bertipe or. Pengkodean masukan harus UTF-8, UTF-16 atau UTF-32. Berubah di versi 3. 9. Encoding argumen kata kunci telah dihapus. Encoder dan Decoderkelas json. JSONDecoder(* , object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)Dekoder JSON sederhana Melakukan terjemahan berikut dalam decoding secara default JSON Piton obyek dikt Himpunan daftar rangkaian str nomor (int) int nomor (nyata) mengambang BENAR BENAR Salah PALSU batal Tidak ada Itu juga memahami >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')1, >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')2, dan >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')3 sebagai nilai >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }4 yang sesuai, yang berada di luar spesifikasi JSON object_hook, jika ditentukan, akan dipanggil dengan hasil dari setiap objek JSON yang didekodekan dan nilai pengembaliannya akan digunakan sebagai pengganti yang diberikan. Ini dapat digunakan untuk menyediakan deserialisasi khusus (mis. g. untuk mendukung petunjuk kelas JSON-RPC) object_pairs_hook, jika ditentukan akan dipanggil dengan hasil dari setiap objek JSON yang didekodekan dengan daftar pasangan yang diurutkan. Nilai pengembalian object_pairs_hook akan digunakan sebagai pengganti. Fitur ini dapat digunakan untuk mengimplementasikan decoder kustom. Jika object_hook juga ditentukan, object_pairs_hook diprioritaskan Berubah di versi 3. 1. Menambahkan dukungan untuk object_pairs_hook. parse_float, jika ditentukan, akan dipanggil dengan string dari setiap float JSON yang akan didekodekan. Secara default, ini setara dengan def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)1. Ini dapat digunakan untuk menggunakan tipe data atau parser lain untuk float JSON (mis. g. ) parse_int, jika ditentukan, akan dipanggil dengan string dari setiap int JSON yang akan didekodekan. Secara default, ini setara dengan def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)3. Ini dapat digunakan untuk menggunakan tipe data atau parser lain untuk bilangan bulat JSON (mis. g. ) parse_constant, jika ditentukan, akan dipanggil dengan salah satu string berikut. def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)6, def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)7, def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)8. Ini dapat digunakan untuk memunculkan pengecualian jika nomor JSON yang tidak valid ditemukan Jika ketat salah ( >>> import json >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') ['foo', {'bar': ['baz', None, 1.0, 2]}] >>> json.loads('"\\"foo\\bar"') '"foo\x08ar' >>> from io import StringIO >>> io = StringIO('["streaming API"]') >>> json.load(io) ['streaming API']3 adalah default), maka karakter kontrol akan diizinkan di dalam string. Karakter kontrol dalam konteks ini adalah karakter dengan kode karakter dalam rentang 0–31, termasuk >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'04 (tab), >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'05, >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'06, dan >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'07 Jika data yang dideserialisasi bukan dokumen JSON yang valid, a akan dimunculkan Berubah di versi 3. 6. Semua parameter sekarang. dekode(s)Kembalikan representasi Python dari s (contoh yang berisi dokumen JSON) akan dimunculkan jika dokumen JSON yang diberikan tidak valid dekode_mentah(s)Dekode dokumen JSON dari s (dimulai dengan dokumen JSON) dan kembalikan 2-Tuple representasi Python dan indeks di s tempat dokumen berakhir Ini dapat digunakan untuk mendekode dokumen JSON dari string yang mungkin memiliki data asing di bagian akhir kelas json. JSONEncoder(* , skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)Encoder JSON yang dapat diperluas untuk struktur data Python Mendukung objek dan tipe berikut secara default Piton JSON dikt obyek daftar, tupel Himpunan str rangkaian int, float, Enum yang diturunkan dari int & float nomor BENAR BENAR PALSU Salah Tidak ada batal Berubah di versi 3. 4. Menambahkan dukungan untuk kelas Enum turunan int dan float. Untuk memperluas ini untuk mengenali objek lain, subkelas dan terapkan metode dengan metode lain yang mengembalikan objek serial untuk >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'13 jika memungkinkan, jika tidak, ia harus memanggil implementasi superclass (untuk menaikkan ) Jika skipkey salah (default), a akan dimunculkan saat mencoba menyandikan kunci yang bukan , , atau >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6. Jika skipkeys benar, item seperti itu akan dilewati begitu saja Jika sure_ascii benar (default), keluaran dijamin akan membuat semua karakter non-ASCII yang masuk lolos. Jika sure_ascii salah, karakter ini akan ditampilkan apa adanya Jika check_circular benar (default), maka daftar, dicts, dan objek yang disandikan khusus akan diperiksa untuk referensi melingkar selama penyandian untuk mencegah rekursi tak terbatas (yang akan menyebabkan a ). Jika tidak, tidak ada pemeriksaan yang dilakukan Jika allow_nan benar (default), maka >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')1, >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')2, dan >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')3 akan dikodekan seperti itu. Perilaku ini tidak sesuai dengan spesifikasi JSON, tetapi konsisten dengan sebagian besar encoder dan decoder berbasis JavaScript. Kalau tidak, itu akan menjadi untuk menyandikan pelampung tersebut Jika sort_keys benar (default. >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }1), maka keluaran kamus akan diurutkan berdasarkan kunci; Jika indent adalah bilangan bulat atau string non-negatif, maka elemen array JSON dan anggota objek akan dicetak cantik dengan tingkat indentasi tersebut. Tingkat indentasi 0, negatif, atau >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')4 hanya akan menyisipkan baris baru. >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6 (default) memilih representasi yang paling ringkas. Menggunakan indentasi bilangan bulat positif yang banyak ruang per tingkat. Jika indentasi berupa string (seperti >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')6), string tersebut digunakan untuk mengindentasi setiap level Berubah di versi 3. 2. Izinkan string untuk indentasi selain bilangan bulat. Jika ditentukan, pemisah harus berupa tuple ________4______7. Standarnya adalah >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')8 jika inden adalah >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6 dan >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']0 sebaliknya. Untuk mendapatkan representasi JSON yang paling ringkas, Anda harus menentukan >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']1 untuk menghilangkan spasi Berubah di versi 3. 4. Gunakan >>> import json >>> class ComplexEncoder(json.JSONEncoder): .. def default(self, obj): .. if isinstance(obj, complex): .. return [obj.real, obj.imag] .. # Let the base class default method raise the TypeError .. return json.JSONEncoder.default(self, obj) ... >>> json.dumps(2 + 1j, cls=ComplexEncoder) '[2.0, 1.0]' >>> ComplexEncoder().encode(2 + 1j) '[2.0, 1.0]' >>> list(ComplexEncoder().iterencode(2 + 1j)) ['[2.0', ', 1.0', ']']0 sebagai default jika indent bukan >>> import json >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)) { "4": 5, "6": 7 }6. Jika ditentukan, default harus berupa fungsi yang dipanggil untuk objek yang tidak dapat diserialisasi. Itu harus mengembalikan versi objek yang dapat dikodekan JSON atau menaikkan a. Jika tidak ditentukan, dinaikkan Berubah di versi 3. 6. Semua parameter sekarang. default(o)Terapkan metode ini dalam subkelas sedemikian rupa sehingga mengembalikan objek yang dapat diserialkan untuk o, atau memanggil implementasi dasar (untuk menaikkan a ) Misalnya, untuk mendukung iterator sewenang-wenang, Anda dapat mengimplementasikan seperti ini def default(self, o): try: iterable = iter(o) except TypeError: pass else: return list(iterable) # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, o)enkode(o) Mengembalikan representasi string JSON dari struktur data Python, o. Sebagai contoh >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]}) '{"foo": ["bar", "baz"]}'iterencode(o) Enkode objek yang diberikan, o, dan hasilkan setiap representasi string yang tersedia. Sebagai contoh for chunk in json.JSONEncoder().iterencode(bigobject): mysocket.write(chunk) Pengecualianpengecualian json. JSONDecodeError(msg , doc, pos)Subkelas dari dengan atribut tambahan berikut pesanPesan kesalahan yang tidak diformat dokterDokumen JSON sedang diuraikan posIndeks awal dokumen tempat penguraian gagal linenoGaris yang sesuai dengan pos colnoKolom yang sesuai dengan pos Baru di versi 3. 5 Kepatuhan Standar dan InteroperabilitasFormat JSON ditentukan oleh RFC 7159 dan oleh ECMA-404. Bagian ini merinci tingkat kepatuhan modul ini terhadap RFC. Untuk kesederhanaan, dan subclass, dan parameter selain yang disebutkan secara eksplisit, tidak dipertimbangkan Modul ini tidak mematuhi RFC secara ketat, menerapkan beberapa ekstensi yang merupakan JavaScript yang valid tetapi bukan JSON yang valid. Secara khusus
Karena RFC mengizinkan parser yang sesuai dengan RFC untuk menerima teks input yang tidak sesuai dengan RFC, deserializer modul ini secara teknis sesuai dengan RFC di bawah pengaturan default Pengkodean KarakterRFC mengharuskan JSON direpresentasikan menggunakan UTF-8, UTF-16, atau UTF-32, dengan UTF-8 sebagai default yang disarankan untuk interoperabilitas maksimum Seperti yang diizinkan, meskipun tidak diwajibkan, oleh RFC, serializer modul ini menetapkan sure_ascii=True secara default, sehingga keluar dari keluaran sehingga string yang dihasilkan hanya berisi karakter ASCII Selain parameter sure_ascii, modul ini didefinisikan secara ketat dalam hal konversi antara objek Python dan , dan karenanya tidak secara langsung mengatasi masalah pengkodean karakter RFC melarang penambahan byte order mark (BOM) ke awal teks JSON, dan serializer modul ini tidak menambahkan BOM ke outputnya. RFC mengizinkan, tetapi tidak mengharuskan, deserializer JSON untuk mengabaikan BOM awal dalam inputnya. Deserializer modul ini memunculkan a ketika BOM awal ada RFC tidak secara eksplisit melarang string JSON yang berisi urutan byte yang tidak sesuai dengan karakter Unicode yang valid (mis. g. pengganti UTF-16 yang tidak berpasangan), tetapi mencatat bahwa mereka dapat menyebabkan masalah interoperabilitas. Secara default, modul ini menerima dan mengeluarkan (bila ada dalam aslinya) poin kode untuk urutan tersebut Nilai Angka Tak Terbatas dan NaNRFC tidak mengizinkan representasi nilai angka tak terbatas atau NaN. Meskipun demikian, secara default, modul ini menerima dan menampilkan >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')2, >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')3, dan >>> import json >>> def as_complex(dct): .. if '__complex__' in dct: .. return complex(dct['real'], dct['imag']) .. return dct ... >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}', .. object_hook=as_complex) (1+2j) >>> import decimal >>> json.loads('1.1', parse_float=decimal.Decimal) Decimal('1.1')1 seolah-olah mereka adalah nilai literal nomor JSON yang valid >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'_0 Di serializer, parameter allow_nan dapat digunakan untuk mengubah perilaku ini. Di deserializer, parameter parse_constant dapat digunakan untuk mengubah perilaku ini Nama Berulang Dalam ObjekRFC menetapkan bahwa nama dalam objek JSON harus unik, tetapi tidak mengamanatkan bagaimana nama berulang dalam objek JSON harus ditangani. Secara default, modul ini tidak memunculkan pengecualian; >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'_1 Parameter object_pairs_hook dapat digunakan untuk mengubah perilaku ini Nilai Non-Objek, Non-Array Tingkat AtasVersi lama JSON yang ditentukan oleh RFC 4627 yang sudah usang mensyaratkan bahwa nilai tingkat atas teks JSON harus berupa objek atau larik JSON (Python atau ), dan tidak boleh berupa nilai null, boolean, angka, atau string JSON. RFC 7159 menghapus batasan itu, dan modul ini tidak dan tidak pernah menerapkan batasan itu baik dalam serializer maupun deserializer-nya Terlepas dari itu, untuk interoperabilitas maksimum, Anda mungkin ingin secara sukarela mematuhi batasan itu sendiri Keterbatasan ImplementasiBeberapa implementasi deserializer JSON mungkin membatasi
Modul ini tidak memaksakan batasan seperti itu di luar tipe data Python yang relevan itu sendiri atau juru bahasa Python itu sendiri Saat membuat serial ke JSON, berhati-hatilah dengan batasan apa pun dalam aplikasi yang dapat menggunakan JSON Anda. Secara khusus, adalah umum untuk nomor JSON untuk dideserialisasi menjadi nomor presisi ganda IEEE 754 dan dengan demikian tunduk pada rentang representasi dan batasan presisi. Ini sangat relevan saat membuat serialisasi nilai Python dengan besaran yang sangat besar, atau saat membuat serialisasi contoh tipe numerik "eksotis" seperti Antarmuka Baris PerintahKode sumber. Lib/json/alat. py Modul ini menyediakan antarmuka baris perintah sederhana untuk memvalidasi dan mencetak objek JSON dengan cantik Jika argumen >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'54 dan >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'55 opsional tidak ditentukan, dan akan digunakan masing-masing >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'_2 Berubah di versi 3. 5. Output sekarang dalam urutan yang sama dengan input. Gunakan opsi untuk mengurutkan keluaran kamus menurut abjad berdasarkan kunci. Opsi baris perintahinfileFile JSON yang akan divalidasi atau dicetak cantik >>> import json >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':')) '[1,2,3,{"4":5,"6":7}]'_3 Jika infile tidak ditentukan, baca dari outfileTulis output dari infile ke outfile yang diberikan. Jika tidak, tulis ke --sort-kunciUrutkan keluaran kamus menurut abjad berdasarkan kunci Baru di versi 3. 5 --no-pastikan-asciiNonaktifkan pelolosan karakter non-ascii, lihat untuk informasi lebih lanjut Baru di versi 3. 9 --json-barisParsing setiap baris input sebagai objek JSON terpisah Baru di versi 3. 8 --indent, --tab, -, --compactOpsi yang saling eksklusif untuk kontrol spasi Baru di versi 3. 9 -h, --helpTampilkan pesan bantuan Catatan kaki Sebagaimana dicatat dalam kesalahan untuk RFC 7159, JSON mengizinkan karakter literal U+2028 (LINE SEPARATOR) dan U+2029 (PARAGRAPH SEPARATOR) dalam string, sedangkan JavaScript (pada ECMAScript Edition 5. 1) tidak Bagaimana cara mengubah objek respons ke kamus dengan Python?Ini bekerja dengan memuat objek tanggapan menggunakan. get() fungsi. Kami kemudian menerapkan. json() ke objek respons untuk mengubahnya menjadi kamus Python .
Bagaimana cara mengonversi respons json ke kamus?Untuk mengonversi string Python JSON ke Kamus, gunakan json. beban() fungsi. Perhatikan bahwa hanya jika konten JSON adalah Objek JSON, dan saat diuraikan menggunakan fungsi beban(), kita mendapatkan objek Kamus Python. Konten JSON dengan berbagai objek akan dikonversi menjadi daftar Python dengan fungsi beban()
Bagaimana cara mengembalikan nilai dari daftar kamus?Berikut adalah 3 pendekatan untuk mengekstrak nilai kamus sebagai daftar dengan Python. . (1) Menggunakan fungsi list(). my_list = daftar(my_dict. nilai()) (2) Menggunakan Pemahaman Daftar. my_list = [i untuk i di my_dict. nilai()] (3) Menggunakan For Loop. my_list = [] untuk i di my_dict. nilai(). daftarku. tambahkan (i) Bagaimana cara mengonversi permintaan ke kamus dengan Python?Setiap kali pustaka permintaan digunakan untuk membuat permintaan, objek Respons dikembalikan. Pustaka permintaan Python menyediakan metode yang bermanfaat, json() , untuk mengonversi objek Respons ke kamus Python. |