Paket Robust-json adalah pustaka yang ringan namun mumpuni untuk bekerja dengan file dan objek JSON dengan Python.
Anda dapat menginstal paket ini langsung dari PyPI:
pip install robust-json
Pustaka ini hanya didukung pada python 3.x.
Jika Anda ingin menyempurnakan proyek ini, diskusikan dulu ide Anda dengan membuka terbitan baru. Setelah itu, potong repositori ini dan terapkan fitur luar biasa ini atau perbaiki bug yang mengganggu ini. Kemudian buat PR baru dan tunggu persetujuan.
Catatan: harap baca file kontribusi.md terlebih dahulu. Di sana Anda dapat menemukan kode etik dan informasi berguna mengenai proses kontribusi.
Perpustakaan ini mencakup 4 modul:
Modul ini menyediakan berbagai metode untuk bekerja dengan file JSON melalui kelas JsonFileParser . Secara otomatis mem-parsing dan memuat JSON yang valid dari file yang ditentukan dan juga memeriksa apakah file siap untuk diproses. Untuk mengaksesnya, cukup impor JsonFileParser dari modul file:
from robust_json.file import JsonFileParser
dan inisialisasi:
op = JsonFileParser(path_to_json_file)
Catatan: JsonFileParser sekarang mendukung penyimpanan otomatis. Jika diaktifkan, modul akan menyimpan objek aktif setelah setiap perubahan dilakukan dan menulisnya ke file tertentu.
Untuk mengaktifkan penyimpanan otomatis cukup inisialisasi modul ini dengan parameter autosave
disetel ke True
:
op = JsonFileParser(path_to_json_file, autosave=True)
Catatan: Anda juga dapat menentukan file untuk penyimpanan otomatis. Cukup berikan parameter autosave_path
dengan jalur ke file Anda selama inisialisasi, seperti ini:
op = JsonFileParser(path*to_json_file, autosave=True, autosave_path=path_to_autosave_file)
Jika file tidak ada, modul akan membuatnya. Jika file memang ada, maka akan dipotong dan diisi dengan objek aktif berseri.
Selama inisialisasi, pengecualian JSONFileError mungkin dimunculkan. Ini berarti parser tidak dapat memproses konten file tertentu atau file memiliki ekstensi yang tidak didukung. Juga selama fase ini, FileNotFoundError mungkin muncul dan menandai bahwa file tertentu tidak ada. Esepsi IntrueFunctionParameterTypeError akan dimunculkan jika satu atau lebih parameter memiliki tipe yang salah.
Properti :
JsonFileParser.file_formats Properti ini mencantumkan semua ekstensi file yang didukung oleh modul ini dalam bentuk array. Saat ini hanya file .json dan .txt yang didukung. Ini digunakan selama inisialisasi kelas untuk menentukan apakah file dapat diproses.
JsonFileParser.path Properti ini mengembalikan jalur file sumber
JsonFileParser.active_json Properti ini mengembalikan objek JSON dengan semua perubahan terkini.
JsonFileParser.backup Properti ini mengembalikan objek JSON awal, mengabaikan semua perubahan terkini. Dua properti terakhir ini mungkin membingungkan, jadi berikut ini contohnya ( Catatan: lihat bagian dokumentasi terkait untuk fungsi JsonFileParser.append() ):
from robust_json.file import JsonFileParser
op = JsonFileParser('test1.json') #Class initialization
# Contents of 'test1.json' file: {'test_key': 'test_value'}
op.append('$', {'append_key': 'append_value'})
print(op.active_json)
# Output: {'test_key': 'test_value', 'append_key': 'append_value'}
print(op.backup)
# Output: {'test_key': 'test_value'}
# As you can see, JsonFileParser.backup property is equal to initial contents of 'test1.json' file.
# This is useful when there is a need to discard all changes to JSON object.
Metode :
JsonFileParser.get_json_from_file() Metode ini mengambil semua JSON dari file dan mengembalikannya sebagai kamus Python. Ini dipanggil secara otomatis ketika file tertentu diproses untuk pertama kalinya.
from robust_json.file import JsonFileParser
op = JsonFileParser('test1.json') # JsonFileParser.get_json_from_file() function is called here
JsonFileParser.get_key_value(json_path: str) Metode ini mengakses nilai dari pasangan kunci:nilai tertentu dalam objek JSON dan mengembalikannya. json_path:parameter str menentukan jalur ke pasangan kunci:nilai (misalnya field0.field1.[...].fieldn). Contoh:
from robust_json.file import JsonFileParser
op = JsonFileParser('test2.json')
# Contents of 'test2.json' file: {'test_key': 'test_value', 'test_arr': [1, 2, 3]}
val = op.get_key_value('test_key')
print(val)
# Output: 'test_value'
# You can use this method to retrieve an element from JSON array
val = op.get_key_value('test_arr[1]')
print(val)
# Output: 2
Fungsi ini akan memunculkan IntrueFunctionParameterTypeError jika parameternya memiliki tipe yang salah. Fungsi ini juga akan memunculkan JSONPathError jika jalur JSON yang ditentukan tidak valid (tidak ada atau tidak dapat diakses).
JsonFileParser.append(json_path: str, append_value: any, append_at_end: bool = False) Metode ini menambahkan nilai ke objek JSON yang ada dan mengembalikan kamus Python dengan konten yang diperbarui. json_path: parameter str menentukan jalur di mana nilai baru akan ditambahkan. Untuk menambahkan nilai ke akar objek JSON, json_path harus sama dengan '$'. append_value:parameter apa pun menentukan nilai yang akan ditambahkan. append_at_end:bool mengontrol perilaku fungsi ini mengenai array objek JSON (struktur seperti ini: [{}, {}, {}, ...]) dan array umum (struktur seperti ini: [a, b, c, . ..]). Itu tidak berpengaruh pada struktur lain. Jika disetel ke False, fungsi akan mencoba menambahkan nilai tertentu ke setiap objek array. Jika disetel ke True, fungsi akan mencoba menambahkan nilai tertentu di akhir array. (lihat contoh di bawah). Fungsi ini akan mengembalikan kamus Python dengan JSON yang diperbarui.
Fungsi ini akan memunculkan pengecualian IntrueFunctionParameterTypeEroor jika parameter(-s)-nya memiliki(-ve) tipe yang salah. Fungsi ini juga akan memunculkan pengecualian ValueError jika 'tambahkan nilai' kosong (sama dengan string kosong, array kosong, kamus kosong, dll.). Fungsi ini akan memunculkan _JSONPathError jika jalur yang diberikan tidak valid (tidak ada atau tidak dapat diakses). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Menambahkan pasangan kunci:nilai sederhana ke akar suatu objek
from robust_json.file import JsonFileParser
op = JsonFileParser('test3.json')
# Contents of 'test3.json' file: {'test_key': 'test_value'}
op.append('$', {'add_key': 'add_var'})
print(op.active_json)
# Output: {'test_key': 'test_value', 'add_key': 'add_var'}
Menambahkan objek baru ke array objek
from robust_json.file import JsonFileParser
op = JsonFileParser('users.json')
# Contents of 'users.json' file: {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}]}
op.append('users', {'id': 3, 'name': 'Liza'})
print(op.active_json)
# Output: {'users': [{'id': 3, 'name': 'Lisa'}, {'id': 3, 'name': 'Lisa'}]}
# This is not good!
# This happened because 'append_at_end' parameter is set to False.
# Function appended new object to each of the objects in the array and new values have overwritten the old
# ones.
# Note: we can discard these unwanted/malicious changes using JsonFileParser.reset() function with
# its parameter set to True. (please refer to corresponding section in docs)
op.reset(True)
print(op.active_json)
# Output: {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}]}
# We need to set 'append_at_end' parameter to True to avoid this.
op.append('users', {'id': 3, 'name': 'Liza'}, True)
print(op.active_json)
# Output: {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}, {'id': 3, 'name': 'Lisa'}]}
Menambahkan pasangan kunci:nilai ke setiap objek array
from robust_json.file import JsonFileParser
op = JsonFileParser('users.json')
# Contents of 'users.json' file: {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}]}
op.append('users', {'role': 'guest'})
print(op.active_json)
# Output: {'users':[{'id':1, 'name':'Ken', 'role':'guest'}, {'id':2, 'name':'Alec', 'role':'guest'}]}
Menambahkan elemen baru ke array elemen:
from robust_json.file import JsonFileParser
op = JsonFileParser('test4.json')
# Contents of 'test4.json' file: {'colors': ['cyan', 'magenta']}
op.append('colors', 'yellow')
print(op.active_json)
# Output: {'colors': ['cyan', 'magenta']}
# Nothing happened.
# That's because 'append_at_end' parameter is set to False.
# Function tried to append new string to each string and failed.
# To fix this, we need to set 'append_at_end' parameter to True.
op.append('colors', 'yellow', True)
print(op.active_json)
# Output: {'colors': ['cyan', 'magenta', 'yellow']}
JsonFileParser.update_value(json_path: str, key_or_index: Union[str, int], new_value: any, strict_mode: bool = False)
Fungsi ini akan memperbarui nilai dalam pasangan kunci:nilai dan mengembalikan kamus Python dengan konten yang diperbarui. json_path:parameter str menentukan jalur ke kunci:pasangan nilai/array/dll. induk yang perlu diperbarui. (Untuk memperbarui nilai di root objek JSON, json_path harus sama dengan '$') sedangkan parameter key_or_index:Union[str, int] menentukan kunci (jika itu objek) atau indeks array (jika itu array). Artinya jika kita perlu memperbarui kunci dengan jalur 'field0.field1.upd key', maka _json_path akan sama dengan 'field0.field1' dan parameter key_or_index akan sama dengan 'upd key'. _Catatan: jika Anda menggunakan indeks array saat parameter 'json_path' menunjuk ke objek JSON, atau jika Anda menggunakan nama properti saat 'json_path' menunjuk ke array JSON, pengecualian akan dimunculkan (Lihat contoh di bawah). new_value:any menentukan nilai yang akan menimpa nilai lama dan strict_mode:bool mengaktifkan Mode Ketat. Secara default mode ini dimatikan. Jika diaktifkan, metode ini akan memastikan bahwa nilai baru memiliki tipe yang sama dengan nilai lama (jika nilai lama berupa string, maka nilai baru juga harus berupa string, dll.). Jika tipenya tidak cocok, pengecualian akan dimunculkan.
Fungsi ini akan memunculkan pengecualian IntrueFunctionParameterTypeError jika parameternya (-s) memiliki tipe yang salah. Fungsi ini juga akan memunculkan JSONStrictModeError jika tipenya tidak cocok jika Mode Ketat diaktifkan dan pengecualian JSONPathError jika jalur JSON tidak valid (tidak ada atau tidak dapat diakses). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Memperbarui pasangan kunci:nilai di akar objek:
from robust_json.file import JsonFileParser
op = JsonFileParser('test5.json')
# Contents of 'test5.json' file: {'app_name': 'HomeCare', 'version', '1.0.0'}
op.update_value('$', 'version': '1.0.5')
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'version': '1.0.5'}
Memperbarui item dalam array:
from robust_json.file import JsonFileParser
op = JsonFileParser('test6.json')
# Contents of 'test6.json' file: {'app_name': 'HomeCare', 'authors': ['Alec Hammer', 'Nick Rogers']}
op.update_value('authors', 1, 'Nick Rogerson')
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'authors': ['Alec Hammer', 'Nick Rogerson']}
# Note: if you don't know the index of an item, you can use
# 'get_item_index()' function from 'robust_json.ext' module to get it.
# (See corresponding section in the docs)
from robust_json.file import JsonFileParser
import robust_json.ext as ext
op = JsonFileParser('test6.json')
# Contents of 'test6.json' file: {'app_name': 'HomeCare', 'authors': ['Alec Hammer', 'Nick Rogers']}
# Getting an array for future use
authors_array = op.get_key_value('authors')
print(authors_array)
# Output: ['Alec Hammer', 'Nick Rogers']
# Finding the index
index = ext.get_item_index('Alec Hammer', authors_array, False)
print(index)
# Output: 0
#Updating value
op.update_value('authors', index, 'Alain Hammer')
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'authors': ['Alain Hammer', 'Nick Rogers']}
Memperbarui nilai dengan Mode Ketat:
from robust_json.file import JsonFileParser
op = JsonFileParser('test6.json')
# Contents of 'test6.json' file: {'app_name': 'HomeCare', 'app_id': 1077}
op.update_value('$', 'app_id', 'this is a string', True)
# A 'StrictModeError' exception was raised.
# This happened because new value has a different type.
# Let's try again, but with integer.
op.update_value('$', 'app_id', 1080, True)
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'app_id': 1080}
JsonFileParser.delete(json_path: str, key_or_index: Union[str, int]) Fungsi ini akan menghapus elemen dari JSON dan mengembalikan kamus Python dengan konten yang diperbarui. json_path:parameter str menentukan jalur ke kunci:pasangan nilai/array/dll. induk yang perlu dihapus. (Untuk menghapus nilai di root objek JSON, json_path harus sama dengan '$') sedangkan parameter key_or_index:Union[str, int] menentukan kunci (jika itu objek) atau indeks array (jika itu array). Artinya jika kita perlu menghapus kunci dengan jalur ' kunci field0.field1.del', maka _json_path akan sama dengan 'field0.field1' dan parameter key_or_index akan sama dengan ' kunci del'. _Catatan: jika Anda menggunakan indeks array saat parameter 'json_path' menunjuk ke objek JSON, atau jika Anda menggunakan nama properti saat 'json_path' menunjuk ke array JSON, pengecualian akan dimunculkan (Lihat contoh di bawah). Fungsi ini akan memunculkan pengecualian IntrueFunctionParameterTypeError jika parameternya (-s) memiliki tipe yang salah. Fungsi ini juga akan memunculkan pengecualian JSONPathError jika jalur JSON tidak valid (tidak ada atau tidak dapat diakses). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Menghapus pasangan kunci:nilai di akar objek:
from robust_json.file import JsonFileParser
op = JsonFileParser('test7.json')
# Contents of 'test5.json' file: {'test_key': 'test_val', 'del_key': 'del_val'}
op.delete('$', 'del_key')
print(op.active_json)
# Output: {'test_key': 'test_val'}
Menghapus item dalam array:
from robust_json.file import JsonFileParser
op = JsonFileParser('test8.json')
# Contents of 'test6.json' file: {'app_name': 'PetShopify', 'authors': ['Alec Hammer', 'Nick Rogers']}
op.delete('authors', 1)
print(op.active_json)
# Output: {'app_name': 'PetShopify', 'authors': ['Alec Hammer']}
# Note: if you don't know the index of an item, you can use 'get_item_index()'
# function from 'robust_json.ext' module to get it. (See corresponding section in the docs)
from robust_json.file import JsonFileParser
import robust_json.ext as ext
op = JsonFileParser('test9.json')
# Contents of 'test6.json' file: {'app_name': 'PetShopify', 'authors': ['Alec Hammer', 'Nick Rogers']}
# Getting an array for future use
authors_array = op.get_key_value('authors')
print(authors_array)
# Output: ['Alec Hammer', 'Nick Rogers']
# Finding the index
index = ext.get_item_index('Alec Hammer', authors_array, False)
print(index)
# Output: 0
#Updating value
op.delete('authors', index)
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'authors': ['Nick Rogers']}
JsonFileParser.minify() Fungsi ini akan menghapus semua lekukan dalam file JSON. Pada dasarnya ini akan memampatkan semua JSON menjadi satu baris.
Fungsi ini tidak mengembalikan nilai apa pun.
JsonFileParser.prettify(indent: int = 4) Fungsi ini akan menambahkan indentasi ke JSON di file sumber untuk meningkatkan keterbacaannya. indent:int parameter menentukan jumlah spasi. Secara default sama dengan 4. Fungsi ini merupakan kebalikan dari JsonFileParser.minify()
Fungsi ini tidak mengembalikan nilai apa pun.
Fungsi ini akan memunculkan IntrueFunctionParameterTypeError jika parameternya memiliki tipe yang salah.
JsonFileParser.reset(discard_active_object: bool = False) Fungsi ini akan mengatur ulang objek JSON yang aktif, menghapus segala perubahan yang dilakukan padanya. buang_active_object:parameter bool mengontrol perilaku fungsi ini terkait objek JSON aktif (properti JsonFileParser.active_json). Jika disetel ke False, metode ini hanya akan mengembalikan objek awal dan menyimpan semua perubahan pada JSON yang aktif. Jika disetel ke True, fungsi ini akan tetap mengembalikan objek awal, namun juga akan mengatur ulang objek yang aktif, dan semua perubahan akan hilang selamanya.
Fungsi ini akan memunculkan IntrueFunctionParameterTypeError jika parameternya memiliki tipe yang salah.
Contoh:
Mendapatkan objek awal dan menyimpannya dalam variabel:
from robust_json.file import JsonFileParser
op = JsonFileParser('test10.json')
# Contents of `test10.json` file: { "simple_key": "simple_value" }
op.append('$', { "test_arr": [1, 2, 3] })
# We appended key:value pair to distinguish objects among each other.
initial = op.reset()
print(initial)
# initial = { "simple_key": "simple_value" }
print(op.active_json)
# Output: { "simple_key": "simple_value", "test_arr": [1, 2, 3] }
# Calling this method without parameters simply makes it return initial
# object, saving the active one for future use.
Mendapatkan objek awal dan menyetel ulang objek aktif:
from robust_json.file import JsonFileParser
op = JsonFileParser('test10.json')
# Contents of `test10.json` file: { "simple_key": "simple_value" }
op.append('$', { "test_arr": [1, 2, 3] })
# We appended key:value pair to distinguish objects among each other.
initial = op.reset(True)
print(initial)
# Output: { "simple_key": "simple_value" }
print(op.active_json)
# Output: { "simple_key": "simple_value" }
# Calling this method with 'discard_active_object' set to True.
# makes it completely revert all changes to active object, making it
# equal to the initial one.
# Warning!
# Note: if called with 'discard_active_object' set to True, there
# is no way of going back. All changes will be gone for good.
# Please use this with extreme caution!
JsonFileParser.save_to_file(path: str = Tidak ada, prettify: bool = True, create_file: bool = False) Fungsi ini akan menyimpan objek JSON aktif ke dalam file. path: parameter str menentukan jalur ke file. Jika dibiarkan kosong, objek aktif akan disimpan ke file sumber. prettify: parameter bool mengaktifkan lekukan. Secara default, ini diatur ke True. Jika disetel ke False, JSON akan dikompresi menjadi satu baris. create_file: parameter bool memungkinkan pembuatan file. Jika disetel ke True, fungsi ini akan membuat file baru dan menyimpan objek aktif di sana, tetapi patuhi jika parameter jalur menunjuk ke file yang tidak ada. Catatan: jika create_file disetel ke True dan jalur menunjuk ke file yang ada, pengecualian akan dimunculkan.
Fungsi ini akan memunculkan JSONFileError jika file akhir tidak mendukung JSON (memiliki ekstensi yang tidak didukung). Fungsi ini akan memunculkan FileExistsError jika create_file disetel ke True dan file sudah ada di jalur yang ditentukan. Fungsi ini akan memunculkan FileNotFoundError jika create_file disetel ke False dan file tidak dapat ditemukan di jalur yang ditentukan. Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Menyimpan objek aktif ke file sumber:
from robust_json.file import JsonFileParser
op = JsonFileParser('data.json')
# Contents of 'data.json' file: {'name': 'Helen Anderson', 'employee_id': 107756}
op.update_value('$', 'employee_id', 107744)
print(op.active_json)
# Output: {'name': 'Helen Anderson', 'employee_id': 107744}
op.save_to_file()
# Contents of 'data.json' file: {'name': 'Helen Anderson', 'employee_id': 107744}
# Calling 'save_to_file' method without any arguments makes it
# overwrite an object in source file ('data.json' in this case)
# with the value of JsonFileParser.active_json property.
Menyimpan objek aktif ke file lain (yang sudah ada):
from robust_json.file import JsonFileParser
op = JsonFileParser('data.json')
# Contents of 'data.json' file: {'name': 'Helen Anderson', 'employee_id': 107756}
op.update_value('$', 'employee_id', 107744)
print(op.active_json)
# Output: {'name': 'Helen Anderson', 'employee_id': 107744}
op.save_to_file(path='new_data.json')
# Contents of 'new_data.json' file: {'name': 'Helen Anderson', 'employee_id': 107744}
# Calling this function with different 'path' parameter will
# make this function save the value of JsonFileParser.active_json property into
# existing file ('new_data.json' in this case). But if file cannot be found, a 'FileNotFoundError'
# exception will be raised.
Menyimpan objek aktif ke file lain (tidak ada):
from robust_json.file import JsonFileParser
op = JsonFileParser('data.json')
# Contents of 'data.json' file: {'name': 'Helen Anderson', 'employee_id': 107756}
op.update_value('$', 'employee_id', 107744)
print(op.active_json)
# Output: {'name': 'Helen Anderson', 'employee_id': 107744}
op.save_to_file(path='new_data.json')
# A 'FileNotFoundError' exception has been raised.
# It happened because this file does not exist.
# To fix this we need to set 'create_file' parameter to True.
op.save_to_file(path='new_data.json', create_file=True)
# Contents of 'new_data.json' file: {'name': 'Helen Anderson', 'employee_id': 107744}
# Calling the function with 'create_file' set to True and different path makes it create
# a new file and save the value of JsonFileParser.active_json property there.
# But if file already exists, a 'FileExistsError' will be raised.
Modul ini menyediakan berbagai metode untuk bekerja dengan objek JSON secara langsung melalui kelas JsonObjectParser . Kelas ini dirancang khusus untuk bekerja dengan JSON yang diterima dari panggilan API atau untuk digunakan di API. Untuk mengaksesnya, cukup impor JsonObjectParser dari modul file:
from robust_json.object import JsonObjectParser
dan inisialisasi:
op = JsonObjectParser(json_obj)
Catatan: JsonObjectParser sekarang mendukung penyimpanan otomatis. Jika diaktifkan, modul akan menyimpan objek aktif setelah setiap perubahan dilakukan dan menulisnya ke file tertentu.
Untuk mengaktifkan penyimpanan otomatis cukup inisialisasi modul ini dengan parameter autosave
disetel ke True
:
op = JsonObjectParser(json_object, autosave=True)
Catatan: Anda juga dapat menentukan file untuk penyimpanan otomatis. Cukup berikan parameter autosave_path
dengan jalur ke file Anda selama inisialisasi, seperti ini:
op = JsonObjectParser(json_object, autosave=True, autosave_path=path_to_autosave_file)
Jika file tidak ada, modul akan membuatnya. Jika file memang ada, maka akan dipotong dan diisi dengan objek aktif berseri.
Selama inisialisasi, pengecualian IntrueFunctionParameterTypeError mungkin dimunculkan. Artinya parameter json memiliki tipe yang salah.
Properti :
JsonObjectParser.active_json Properti ini mengembalikan objek JSON dengan semua perubahan terkini.
JsonObjectParser.backup Properti ini mengembalikan objek JSON awal, mengabaikan semua perubahan terkini. Dua properti terakhir ini mungkin membingungkan, jadi berikut ini contohnya ( Catatan: lihat bagian dokumentasi terkait untuk fungsi JsonObjectParser.append() ):
from robust_json.object import JsonObjectParser
obj = {'test_key': 'test_value'}
op = JsonObjectParser(obj) #Class initialization
op.append('$', {'append_key': 'append_value'})
print(op.active_json)
# Output: {'test_key': 'test_value', 'append_key': 'append_value'}
print(op.backup)
# Output: {'test_key': 'test_value'}
# As you can see, JsonObjectParser.backup property is equal to initial object.
# This is useful when there is a need to discard all changes to JSON object.
Metode :
JsonObjectParser.get_key_value(json_path: str) Metode ini mengakses nilai dari pasangan kunci:nilai tertentu dalam objek JSON dan mengembalikannya. json_path:parameter str menentukan jalur ke pasangan kunci:nilai (misalnya field0.field1.[...].fieldn). Contoh:
from robust_json.object import JsonObjectParser
obj = {'test_key': 'test_value', 'test_arr': [1, 2, 3]}
op = JsonObjectParser(obj)
val = op.get_key_value('test_key')
print(val)
# Output: 'test_value'
# You can use this method to retrieve an element from JSON array
val = op.get_key_value('test_arr[1]')
print(val)
# Output: 2
Fungsi ini akan memunculkan IntrueFunctionParameterTypeError jika parameternya memiliki tipe yang salah. Fungsi ini juga akan memunculkan JSONPathError jika jalur JSON yang ditentukan tidak valid (tidak ada atau tidak dapat diakses). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
JsonObjectParser.append(json_path: str, append_value: any, append_at_end: bool = False) Metode ini menambahkan nilai ke objek JSON yang ada dan mengembalikan kamus Python dengan konten yang diperbarui. json_path: parameter str menentukan jalur di mana nilai baru akan ditambahkan. Untuk menambahkan nilai ke akar objek JSON, json_path harus sama dengan '$'. append_value:parameter apa pun menentukan nilai yang akan ditambahkan. append_at_end:bool mengontrol perilaku fungsi ini mengenai array objek JSON (struktur seperti ini: [{}, {}, {}, ...]) dan array umum (struktur seperti ini: [a, b, c, . ..]). Itu tidak berpengaruh pada struktur lain. Jika disetel ke False, fungsi akan mencoba menambahkan nilai tertentu di setiap objek array. Jika disetel ke True, fungsi akan mencoba menambahkan nilai tertentu di akhir array. (lihat contoh di bawah). Fungsi ini akan mengembalikan kamus Python dengan JSON yang diperbarui.
Fungsi ini akan memunculkan pengecualian IntrueFunctionParameterTypeEroor jika parameter(-s)-nya memiliki(-ve) tipe yang salah. Fungsi ini juga akan memunculkan pengecualian ValueError jika 'tambahkan nilai' kosong (string kosong, array kosong, kamus kosong). Fungsi ini akan memunculkan _JSONPathError jika jalur yang diberikan tidak valid (tidak ada atau tidak dapat diakses). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Menambahkan pasangan kunci:nilai sederhana ke akar suatu objek
from robust_json.object import JsonObjectParser
obj = {'test_key': 'test_value'}
op = JsonObjectParser(obj)
op.append('$', {'add_key': 'add_var'})
print(op.active_json)
# Output: {'test_key': 'test_value', 'add_key': 'add_var'}
Menambahkan objek baru ke array objek
from robust_json.object import JsonObjectParser
obj = {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}]}
op = JsonObjectParser(obj)
op.append('users', {'id': 3, 'name': 'Liza'})
print(op.active_json)
# Output: {'users': [{'id': 3, 'name': 'Lisa'}, {'id': 3, 'name': 'Lisa'}]}
# This is not good!
# This happened because 'append_at_end' parameter is set to False.
# Function appended new object to each of the objects in the array and new values overwrote the old
# ones.
# Note: we can discard these unwanted/malicious changes using JsonObjectParser.reset() function with
# its parameter set to True. (please refer to corresponding section in docs)
op.reset(True)
print(op.active_json)
# Output: {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}]}
# We need to set 'append_at_end' parameter to True to avoid this.
op.append('users', {'id': 3, 'name': 'Liza'}, True)
print(op.active_json)
# Output: {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}, {'id': 3, 'name': 'Lisa'}]}
Menambahkan pasangan kunci:nilai ke setiap objek array
from robust_json.object import JsonObjectParser
obj = {'users': [{'id': 1, 'name': 'Ken'}, {'id': 2, 'name': 'Alec'}]}
op = JsonObjectParser(obj)
op.append('users', {'role': 'guest'})
print(op.active_json)
# Output: {'users':[{'id':1, 'name':'Ken', 'role':'guest'}, {'id':2, 'name':'Alec', 'role':'guest'}]}
Menambahkan elemen baru ke array elemen:
from robust_json.object import JsonObjectParser
obj = {'colors': ['cyan', 'magenta']}
op = JsonObjectParser(obj)
op.append('colors', 'yellow')
print(op.active_json)
# Output: {'colors': ['cyan', 'magenta']}
# Nothing happened
# That's because 'append_at_end' parameter is set to False
# Function tried to append new string to each string and failed
# To fix this, we need to set 'append_at_end' parameter to True
op.append('colors', 'yellow', True)
print(op.active_json)
# Output: {'colors': ['cyan', 'magenta', 'yellow']}
JsonObjectParser.update_value(json_path: str, key_or_index: Union[str, int], new_value: any, strict_mode: bool = False)
Fungsi ini akan memperbarui nilai dalam pasangan kunci:nilai dan mengembalikan kamus Python dengan konten yang diperbarui. json_path:parameter str menentukan jalur ke kunci:pasangan nilai/array/dll. induk yang perlu diperbarui. (Untuk memperbarui nilai di root objek JSON, json_path harus sama dengan '$') sedangkan parameter key_or_index:Union[str, int] menentukan kunci (jika itu objek) atau indeks array (jika itu array). Artinya jika kita perlu memperbarui kunci dengan jalur 'field0.field1.upd key', maka _json_path akan sama dengan 'field0.field1' dan parameter key_or_index akan sama dengan 'upd key'. _Catatan: jika Anda menggunakan indeks array saat parameter 'json_path' menunjuk ke objek JSON, atau jika Anda menggunakan nama properti saat 'json_path' menunjuk ke array JSON, pengecualian akan dimunculkan (Lihat contoh di bawah). new_value:any menentukan nilai yang akan menimpa nilai lama dan strict_mode:bool mengaktifkan Mode Ketat. Secara default mode ini dimatikan. Jika diaktifkan, metode ini akan memastikan bahwa nilai baru memiliki tipe yang sama dengan nilai lama (jika nilai lama berupa string, maka nilai baru juga harus berupa string, dll.). Jika tipenya tidak cocok, pengecualian akan dimunculkan.
Fungsi ini akan memunculkan pengecualian IntrueFunctionParameterTypeError jika parameternya (-s) memiliki (-ve) tipe yang salah. Fungsi ini juga akan memunculkan JSONStrictModeError jika tipenya tidak cocok jika Mode Ketat diaktifkan dan pengecualian JSONPathError jika jalur JSON tidak valid (tidak ada atau tidak dapat diakses). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Memperbarui pasangan kunci:nilai di akar objek:
from robust_json.object import JsonObjectParser
op = JsonObjectParser({'app_name': 'HomeCare', 'version', '1.0.0'})
op.update_value('$', 'version': '1.0.5')
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'version': '1.0.5'}
Memperbarui item dalam array:
from robust_json.object import JsonObjectParser
op = JsonObjectParser({'app_name': 'HomeCare', 'authors': ['Alec Hammer', 'Nick Rogers']})
op.update_value('authors', 1, 'Nick Rogerson')
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'authors': ['Alec Hammer', 'Nick Rogerson']}
# Note: if you don't know the index of an item, you can use 'get_item_index()'
# function from 'robust_json.ext' module to get it. (See corresponding section in the docs)
from robust_json.object import JsonObjectParser
import robust_json.ext as ext
op = JsonObjectParser({'app_name': 'HomeCare', 'authors': ['Alec Hammer', 'Nick Rogers']})
# Getting an array for future use
authors_array = op.get_key_value('authors')
print(authors_array)
# Output: ['Alec Hammer', 'Nick Rogers']
# Finding the index
index = ext.get_item_index('Alec Hammer', authors_array, False)
print(index)
# Output: 0
#Updating value
op.update_value('authors', index, 'Alain Hammer')
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'authors': ['Alain Hammer', 'Nick Rogers']}
Memperbarui nilai dengan Mode Ketat:
from robust_json.object import JsonObjectParser
op = JsonObjectParser({'app_name': 'HomeCare', 'app_id': 1077})
op.update_value('$', 'app_id', 'this is a string', True)
# An 'StrictModeError' was raised
# This happened because new value has a different type
# Let's try again, but with integer
op.update_value('$', 'app_id', 1080, True)
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'app_id': 1080}
JsonObjectParser.delete(json_path: str, key_or_index: Union[str, int]) Fungsi ini akan menghapus elemen dari JSON dan mengembalikan kamus Python dengan konten yang diperbarui. json_path:parameter str menentukan jalur ke kunci:pasangan nilai/array/dll. induk yang perlu dihapus. (Untuk menghapus nilai di root objek JSON, json_path harus sama dengan '$') sedangkan parameter key_or_index:Union[str, int] menentukan kunci (jika itu objek) atau indeks array (jika itu array). Artinya jika kita perlu menghapus kunci dengan jalur ' kunci field0.field1.del', maka _json_path akan sama dengan 'field0.field1' dan parameter key_or_index akan sama dengan ' kunci del'. _Catatan: jika Anda menggunakan indeks array saat parameter 'json_path' menunjuk ke objek JSON, atau jika Anda menggunakan nama properti saat 'json_path' menunjuk ke array JSON, pengecualian akan dimunculkan (Lihat contoh di bawah). Fungsi ini akan memunculkan pengecualian IntrueFunctionParameterTypeError jika parameternya (-s) memiliki (-ve) tipe yang salah. Fungsi ini juga akan memunculkan pengecualian JSONPathError jika jalur JSON tidak valid (tidak ada atau tidak dapat diakses). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Menghapus pasangan kunci:nilai di akar objek:
from robust_json.object import JsonObjectParser
obj = {'test_key': 'test_val', 'del_key': 'del_val'}
op = JsonObjectParser(obj)
op.delete('$', 'del_key')
print(op.active_json)
# Output: {'test_key': 'test_val'}
Menghapus item dalam array:
from robust_json.object import JsonObjectParser
op = JsonObjectParser('test8.json')
# Contents of 'test6.json' file: {'app_name': 'PetShopify', 'authors': ['Alec Hammer', 'Nick Rogers']}
op.delete('authors', 1)
print(op.active_json)
# Output: {'app_name': 'PetShopify', 'authors': ['Alec Hammer']}
# Note: if you don't know the index of an item, you can use 'get_item_index()'
# function from 'robust_json.ext' module to get it. (See corresponding section in the docs)
from robust_json.object import JsonObjectParser
import robust_json.ext as ext
obj = {'app_name': 'PetShopify', 'authors': ['Alec Hammer', 'Nick Rogers']}
op = JsonObjectParser(obj)
# Getting an array for future use
authors_array = op.get_key_value('authors')
print(authors_array)
# Output: ['Alec Hammer', 'Nick Rogers']
# Finding the index
index = ext.get_item_index('Alec Hammer', authors_array, False)
print(index)
# Output: 0
#Updating value
op.delete('authors', index)
print(op.active_json)
# Output: {'app_name': 'HomeCare', 'authors': ['Nick Rogers']}
JsonObjectParser.reset(discard_active_object: bool = False) Fungsi ini akan mereset objek JSON yang aktif, menghapus perubahan apa pun yang dilakukan padanya. buang_active_object:parameter bool mengontrol perilaku fungsi ini terkait objek JSON aktif (properti JsonObjectParser.active_json). Jika disetel ke False, metode ini hanya akan mengembalikan objek awal dan menyimpan semua perubahan pada JSON yang aktif. Jika disetel ke True, fungsi ini akan tetap mengembalikan objek awal, namun juga akan mengatur ulang objek yang aktif, dan semua perubahan akan hilang selamanya.
Fungsi ini akan memunculkan IntrueFunctionParameterTypeError jika parameternya memiliki tipe yang salah. Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Mendapatkan objek awal dan menyimpannya dalam variabel:
from robust_json.object import JsonObjectParser
obj = { "simple_key": "simple_value" }
op = JsonObjectParser(obj)
op.append('$', { "test_arr": [1, 2, 3] })
# We appended key:value pair to distinguish objects among each other
initial = op.reset()
print(initial)
# initial = { "simple_key": "simple_value" }
print(op.active_json)
# Output: { "simple_key": "simple_value", "test_arr": [1, 2, 3] }
# Calling this method without parameters simply makes it return initial
# object, saving the active one for future use
Mendapatkan objek awal dan menyetel ulang objek aktif:
from robust_json.object import JsonObjectParser
obj = { "simple_key": "simple_value" }
op = JsonObjectParser(obj)
op.append('$', { "test_arr": [1, 2, 3] })
# We appended key:value pair to distinguish objects among each other
initial = op.reset(True)
print(initial)
# Output: { "simple_key": "simple_value" }
print(op.active_json)
# Output: { "simple_key": "simple_value" }
# Calling this method with 'discard_active_object' set to True
# makes it completely revert all changes to active object, making it
# equal to the initial one.
# Warning!
# Note: if called with 'discard_active_object' set to True, there
# is no way of going back. All changes will be gone for good.
# Please use this with extreme caution!
JsonObjectParser.save_to_file(path: str, prettify: bool = True, create_file: bool = False) Fungsi ini akan menyimpan objek JSON aktif ke dalam file. path: parameter str menentukan jalur ke file. prettify: parameter bool mengaktifkan lekukan. Secara default, ini diatur ke True. Jika disetel ke False, JSON akan dikompresi menjadi satu baris. create_file: parameter bool memungkinkan pembuatan file. Jika disetel ke True, fungsi ini akan membuat file baru dan menyimpan objek aktif di sana, tetapi patuhi jika parameter jalur menunjuk ke file yang tidak ada. Catatan: jika create_file disetel ke True dan jalur menunjuk ke file yang ada, pengecualian akan dimunculkan.
Fungsi ini akan memunculkan JSONFileError jika file akhir tidak mendukung JSON (memiliki ekstensi yang tidak didukung). Fungsi ini akan memunculkan FileExistsError jika cheate_file disetel ke True dan file sudah ada di jalur yang ditentukan. Fungsi ini akan memunculkan FileNotFoundError jika create_file disetel ke False dan file tidak dapat ditemukan di jalur yang ditentukan. Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
Menyimpan objek aktif ke file (yang sudah ada):
from robust_json.object import JsonObjectParser
obj = {'name': 'Helen Anderson', 'employee_id': 107756}
op = JsonObjectParser(obj)
op.update_value('$', 'employee_id', 107744)
print(op.active_json)
# Output: {'name': 'Helen Anderson', 'employee_id': 107744}
op.save_to_file(path='new_data.json')
# Contents of 'new_data.json' file: {'name': 'Helen Anderson', 'employee_id': 107744}
# Calling this function with different 'path' parameter will
# make this function save the value of JsonObjectParser.active_json property into
# existing file ('new_data.json' in this case). But if file cannot be found, a 'FileNotFoundError'
# exception will be raised.
Menyimpan objek aktif ke file (tidak ada):
from robust_json.object import JsonObjectParser
obj = {'name': 'Helen Anderson', 'employee_id': 107756}
op = JsonObjectParser(obj)
op.update_value('$', 'employee_id', 107744)
print(op.active_json)
# Output: {'name': 'Helen Anderson', 'employee_id': 107744}
op.save_to_file(path='new_data.json')
# A 'FileNotFoundError' exception has been raised.
# It happened because this file does not exist.
# To fix this we need to set 'create_file' parameter to True.
op.save_to_file(path='new_data.json', create_file=True)
# Contents of 'new_data.json' file: {'name': 'Helen Anderson', 'employee_id': 107744}
# Calling the function with 'create_file' set to True and different path makes it create
# a new file and save the value of JsonObjectParser.active_json property there.
# But if file already exists, a 'FileExistsError' will be raised.
Modul ini berisi semua pengecualian khusus yang dapat dimunculkan selama runtime paket. Ada total 5: JSONFileError , JSONPathError , JSONStrictModeError , JSONObjectError , IntrueFunctionParameterTypeError . Jika Anda perlu mengimpornya, dapat dilakukan seperti ini:
import robust_json.errors as json_err
filter_json_array(json_array: list, field: string, value: any) Fungsi ini akan memfilter array objek JSON tertentu dan mengembalikannya. parameter json_array:list menentukan daftar yang perlu difilter, field:str menentukan kunci dan value:any menentukan nilainya. Dua parameter terakhir membentuk pasangan kunci:nilai yang berperan sebagai filter.
Fungsi ini akan mengembalikan daftar dengan konten yang difilter.
Fungsi ini akan memunculkan pengecualian IntrueFunctionParameterTypeError jika satu atau beberapa parameternya memiliki tipe yang salah. Fungsi ini akan memunculkan JSONObjectError jika json_arr bukan array objek ([{}, {}, {}, ...]). Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh: Memfilter array objek berdasarkan pasangan kunci:nilai tertentu
from robust_json.ext import filter_json_array
orders = [{"order_id":1648,"country":"USA" },{"order_id":1830,"country":"Liberia"},
{"order_id":6703,"country":"USA"},{"order_id":2995,"country":"Russia"}]
usa_orders = filter_json_array(orders, 'country', 'USA')
print(usa_orders)
# Output: [{"order_id":1648,"country":"USA" }, {"order_id":6703,"country":"USA"}]
get_item_index(item: any, array: list, Always_array: bool = False) Fungsi ini akan menemukan intem dalam array tertentu dan mengembalikan indeksnya (-es). item:any menentukan item yang indeksnya perlu ditemukan. array:list menentukan array di mana item ini harus ada dan selalu_array:bool mengontrol tipe kembalian fungsi ini. Jika disetel ke False, fungsi ini akan mengembalikan array jika ada beberapa kecocokan, namun akan mengembalikan bilangan bulat jika hanya ada satu kecocokan. Jika disetel ke True, fungsi ini akan selalu mengembalikan array (lihat contoh di bawah).
Contoh:
from robust_json.ext import get_item_index
arr1 = [1, 2, 3, 4]
index = get_item_index(2, arr1, False)
print(index)
# Output: 1
# Note: we set 'always_array' parameter to False, therefore function returned an integer
arr2 = [5, 9, 10, 45, 555]
index = get_item_index(10, arr2, True)
print(index)
# Output: [2]
# Note: we set 'always_array' parameter to True, therefore function returned an array even if there
# is only one match. This is useful when this array will be iterated later on.
arr3 = [1, 6, 'string', 8, 5, 4, 'string', 0, 22]
index = get_item_index('string', arr3, False)
# Note: even if 'alway_array' parameter set to False, this function will return an array of
# integers because there are multiple matches
print(index)
# Output: [2, 6]
arr4 = [1, 2, 3]
index = get_item_index(6, arr4, False)
# Note: if item is not present in the array and 'always_array' parameter set to False,
# None will be returned.
print(index)
# Output: None
arr5 = [5, 6, 7]
index = get_item_index(10, arr5, True)
# Note: if item is not present in the array and 'always_array' parameter set to True,
# an empty array will be returned.
print(index)
# Output: []
reverse_array(array: list) Fungsi ini akan membalikkan array dan mengembalikannya.
Fungsi ini akan memunculkan IntrueFunctionParameterTypeError jika parameternya memiliki tipe yang salah. Fungsi ini akan memunculkan pengecualian tambahan jika terjadi.
Contoh:
from robust_json.ext import reverse_array
arr = ['a', 'b', 'c']
rev_arr = reverse_array(arr)
print(rev_arr)
# Output: ['c', 'b', 'a']