Saya memiliki JSON ini dalam sebuah file:
{
"maps": [
{
"id": "blabla",
"iscategorical": "0"
},
{
"id": "blabla",
"iscategorical": "0"
}
],
"masks": [
"id": "valore"
],
"om_points": "value",
"parameters": [
"id": "valore"
]
}
Saya menulis skrip ini untuk mencetak semua data JSON:
import json
from pprint import pprint
with open('data.json') as f:
data = json.load(f)
pprint(data)
Program ini menimbulkan pengecualian, meskipun:
Traceback (most recent call last):
File "<pyshell#1>", line 5, in <module>
data = json.load(f)
File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 13 column 13 (char 213)
Bagaimana saya bisa mengurai JSON dan mengekstrak nilainya?
Jawaban:
Data Anda bukan format JSON yang valid . Anda miliki
[]
ketika Anda harus memiliki{}
:[]
adalah untuk array JSON, yang disebutlist
dengan Python{}
adalah untuk objek JSON, yang disebutdict
dengan PythonBeginilah tampilan file JSON Anda:
Kemudian Anda dapat menggunakan kode Anda:
Dengan data, kini Anda juga dapat menemukan nilai seperti:
Cobalah itu dan lihat apakah itu masuk akal.
sumber
u'
sebelum setiap tombol. Ada yang tahu kenapa?Anda
data.json
akan terlihat seperti ini:Kode Anda harus:
Perhatikan bahwa ini hanya berfungsi di Python 2.6 dan lebih tinggi, karena ini tergantung pada-
with
pernyataan . Dalam penggunaan Python 2.5from __future__ import with_statement
, dalam Python <= 2.4, lihat jawaban Justin Peel , yang menjadi dasar jawaban ini.Anda sekarang juga dapat mengakses nilai tunggal seperti ini:
sumber
data_file
open
ed lebih lama dari yang diperlukan.pprint
ing dalamwith
konteks-membuatdata_file
terbuka lebih lama.data["om_points"]
,data["masks"]["id"]
. Idenya adalah Anda dapat mencapai level apa pun dalam kamus dengan menentukan 'jalur kunci'. Jika Anda mendapatkanKeyError
pengecualian itu berarti kunci tidak ada di jalur. Carilah kesalahan ketik atau periksa struktur kamus Anda.Jawaban Justin Peel sangat membantu, tetapi jika Anda menggunakan Python 3 membaca JSON harus dilakukan seperti ini:
Catatan: gunakan
json.loads
sebagai gantijson.load
. Dalam Python 3,json.loads
mengambil parameter string.json.load
mengambil parameter objek seperti file.data_file.read()
mengembalikan objek string.Sejujurnya, saya tidak berpikir itu masalah untuk memuat semua data json ke dalam memori kebanyakan kasus.
sumber
json.load
dihindari dalam mendukung.loads
Python 3?load
.sumber
json.loads
tidak mendekode beberapa objek json. Jika tidak, Anda mendapatkan kesalahan 'Data Ekstra'.}
,]
atau"
). Oleh karena itu Anda memang dapat menggabungkan beberapa objek dalam satu string atau file tunggal, tanpa ambiguitas. Masalahnya di sini adalah bahwa parser mengharapkan satu objek gagal ketika melewati lebih dari satu objek..jsonl
(json lines), objek dipisahkan oleh karakter baris baru yang membuat pra-pemrosesan untuk parsing sepele, dan memungkinkan untuk dengan mudah membagi / batch file tanpa khawatir tentang penanda awal / akhir."Ultra JSON" atau hanya "ujson" dapat menangani memiliki
[]
input file JSON Anda. Jika Anda membaca file input JSON ke dalam program Anda sebagai daftar elemen JSON; seperti,[{[{}]}, {}, [], etc...]
ujson dapat menangani urutan daftar kamus yang sewenang-wenang, kamus daftar.Anda dapat menemukan ujson dalam indeks paket Python dan API hampir identik dengan
json
pustaka bawaan Python .ujson juga jauh lebih cepat jika Anda memuat file JSON yang lebih besar. Anda dapat melihat detail kinerja dibandingkan dengan pustaka JSON Python lain di tautan yang sama.
sumber
Jika Anda menggunakan Python3, Anda dapat mencoba mengubah (
connection.json
file) JSON Anda menjadi:Kemudian gunakan kode berikut:
sumber
with
pernyataan akan lebih baikDi sini Anda pergi dengan
data.json
file yang dimodifikasi :Anda dapat memanggil atau mencetak data pada konsol dengan menggunakan baris berikut:
Output yang diharapkan untuk
print(data_item['parameters'][0]['id'])
:Output yang diharapkan untuk
print(data_item['parameters'][0]['id'])
:sumber
Ada dua tipe dalam penguraian ini.
Dari sebuah file, Anda dapat menggunakan yang berikut ini
Arktik ini menjelaskan penguraian penuh dan mendapatkan nilai menggunakan dua skenario. Parsing JSON menggunakan Python
sumber
Sebagai pengguna python3 ,
Perbedaan antara
load
danloads
metode ini penting terutama ketika Anda membaca data json dari file.Sebagaimana dinyatakan dalam dokumen:
json.load:
json.loads:
Metode json.load dapat langsung membaca dokumen json yang dibuka karena ia dapat membaca file biner.
Akibatnya, data json Anda tersedia dalam format yang ditentukan berdasarkan tabel konversi ini:
https://docs.python.org/3.7/library/json.html#json-to-py-table
sumber