แพ็คเกจ Strong-json เป็นไลบรารีน้ำหนักเบา แต่มีความสามารถสำหรับการทำงานกับไฟล์และอ็อบเจ็กต์ JSON ใน Python
คุณสามารถติดตั้งแพ็คเกจนี้ได้โดยตรงจาก PyPI:
pip install robust-json
ไลบรารีนี้รองรับบน python 3.x เท่านั้น
หากคุณต้องการปรับปรุงโครงการนี้ ขั้นแรกให้อภิปรายแนวคิดของคุณด้วยการเปิดประเด็นใหม่ หลังจากนั้นแยกพื้นที่เก็บข้อมูลนี้และใช้ฟีเจอร์ที่ยอดเยี่ยมนี้หรือแก้ไขข้อบกพร่องที่น่ารำคาญนี้ จากนั้นสร้าง PR ใหม่และรอการอนุมัติ
หมายเหตุ: โปรดอ่านไฟล์ contributing.md ก่อน คุณจะพบจรรยาบรรณและข้อมูลที่เป็นประโยชน์เกี่ยวกับกระบวนการบริจาคได้ที่นั่น
ไลบรารีนี้ประกอบด้วย 4 โมดูล:
โมดูลนี้มีวิธีการต่างๆ สำหรับการทำงานกับไฟล์ JSON ผ่านคลาส JsonFileParser โดยจะแยกวิเคราะห์และโหลด JSON ที่ถูกต้องจากไฟล์ที่ระบุโดยอัตโนมัติ และยังตรวจสอบว่าไฟล์พร้อมสำหรับการประมวลผลหรือไม่ หากต้องการเข้าถึง เพียงนำเข้า JsonFileParser จากโมดูลไฟล์:
from robust_json.file import JsonFileParser
และเริ่มต้นมัน:
op = JsonFileParser(path_to_json_file)
หมายเหตุ: ขณะนี้ JsonFileParser รองรับการบันทึกอัตโนมัติแล้ว หากเปิดใช้งาน โมดูลจะบันทึกออบเจ็กต์ที่ใช้งานอยู่หลังจากการเปลี่ยนแปลงทุกครั้งที่ทำและเขียนลงในไฟล์ที่ระบุ
หากต้องการเปิดใช้งานการบันทึกอัตโนมัติ เพียงเริ่มต้นโมดูลนี้ด้วยพารามิเตอร์ autosave
ที่ตั้งค่าเป็น True
:
op = JsonFileParser(path_to_json_file, autosave=True)
หมายเหตุ: คุณยังสามารถระบุไฟล์สำหรับโปรแกรมบันทึกอัตโนมัติได้ เพียงส่งพารามิเตอร์ autosave_path
พร้อมพาธไปยังไฟล์ของคุณในระหว่างการเริ่มต้น เช่นนี้
op = JsonFileParser(path*to_json_file, autosave=True, autosave_path=path_to_autosave_file)
หากไม่มีไฟล์อยู่ โมดูลจะสร้างขึ้นมา หากมีไฟล์อยู่ ไฟล์นั้นจะถูกตัดทอนและเต็มไปด้วยอ็อบเจ็กต์ที่ใช้งานอยู่แบบอนุกรม
ในระหว่างการเริ่มต้น อาจมีข้อยกเว้น JSONFileError เกิดขึ้น ซึ่งหมายความว่า parser ไม่สามารถประมวลผลเนื้อหาของไฟล์ที่ระบุได้หรือไฟล์มีนามสกุลที่ไม่รองรับ นอกจากนี้ในระหว่างขั้นตอนนี้ FileNotFoundError อาจถูกยกขึ้นเพื่อทำเครื่องหมายว่าไม่มีไฟล์ที่ระบุ IncorrectFunctionParameterTypeError eception จะเพิ่มขึ้นหากพารามิเตอร์อย่างน้อยหนึ่งรายการมีประเภทที่ไม่ถูกต้อง
คุณสมบัติ :
JsonFileParser.file_formats คุณสมบัตินี้แสดงรายการนามสกุลไฟล์ทั้งหมดที่ได้รับการสนับสนุนโดยโมดูลนี้ในรูปแบบของอาร์เรย์ ในขณะนี้รองรับเฉพาะไฟล์ .json และ .txt เท่านั้น สิ่งนี้ถูกใช้ในระหว่างการเริ่มต้นคลาสเพื่อตรวจสอบว่าไฟล์สามารถประมวลผลได้หรือไม่
JsonFileParser.path คุณสมบัตินี้ส่งคืนพาธของไฟล์ต้นฉบับ
JsonFileParser.active_json คุณสมบัตินี้ส่งคืนอ็อบเจ็กต์ JSON ที่มีการเปลี่ยนแปลงล่าสุดทั้งหมด
JsonFileParser.backup คุณสมบัตินี้ส่งคืนอ็อบเจ็กต์ JSON เริ่มต้น โดยไม่สนใจการเปลี่ยนแปลงล่าสุดทั้งหมด คุณสมบัติสุดท้ายทั้งสองนี้อาจทำให้เกิดความสับสน ดังนั้นนี่คือตัวอย่าง ( หมายเหตุ: ดูส่วนเอกสารที่เกี่ยวข้องสำหรับฟังก์ชัน 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.
วิธีการ :
JsonFileParser.get_json_from_file() เมธอดนี้จะดึง JSON ทั้งหมดจากไฟล์และส่งกลับเป็นพจนานุกรม Python มันถูกเรียกโดยอัตโนมัติเมื่อมีการประมวลผลไฟล์ที่ระบุเป็นครั้งแรก
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) เมธอดนี้เข้าถึงค่าจากคู่คีย์:ค่าที่ระบุในออบเจ็กต์ JSON และส่งคืนค่าดังกล่าว พารามิเตอร์ json_path:str ระบุเส้นทางไปยังคู่คีย์:ค่า (เช่น field0.field1.[...].fieldn) ตัวอย่าง:
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
ฟังก์ชันนี้จะเพิ่ม IncorrectFunctionParameterTypeError หากพารามิเตอร์มีประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะเพิ่ม JSONPathError หากเส้นทาง JSON ที่ระบุไม่ถูกต้อง (ไม่มีหรือไม่สามารถเข้าถึงได้)
JsonFileParser.append(json_path: str, append_value: any, append_at_end: bool = False) เมธอดนี้จะเพิ่มค่าต่อท้ายออบเจ็กต์ JSON ที่มีอยู่ และส่งกลับพจนานุกรม Python พร้อมเนื้อหาที่อัปเดต พารามิเตอร์ json_path:str ระบุเส้นทางที่จะเพิ่มค่าใหม่ หากต้องการเพิ่มค่าต่อท้ายรากของวัตถุ JSON json_path จะต้องเท่ากับ '$' append_value:พารามิเตอร์ใดๆ ระบุค่าที่จะถูกผนวก append_at_end:bool ควบคุมการทำงานของฟังก์ชันนี้ที่เกี่ยวข้องกับอาร์เรย์ JSON ของอ็อบเจ็กต์ (โครงสร้างเช่นนี้: [{}, {}, {}, ...]) และอาร์เรย์ทั่วไป (โครงสร้างเช่นนี้: [a, b, c, . ..]) มันไม่มีผลกระทบต่อโครงสร้างอื่นๆ หากตั้งค่าเป็น False ฟังก์ชันจะพยายามเพิ่มค่าที่กำหนดให้กับแต่ละออบเจ็กต์ของอาร์เรย์ หากตั้งค่าเป็น True ฟังก์ชันจะพยายามต่อท้ายค่าที่กำหนดที่ส่วนท้ายของอาร์เรย์ (ดูตัวอย่างด้านล่าง) ฟังก์ชันนี้จะส่งคืนพจนานุกรม Python พร้อม JSON ที่อัปเดต
ฟังก์ชันนี้จะเพิ่มข้อยกเว้น IncorrectFunctionParameterTypeEroor หากพารามิเตอร์ (-s) มี (-ve) ประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะเพิ่มข้อยกเว้น ValueError หาก ' ค่าต่อท้าย' ว่างเปล่า (เท่ากับสตริงว่าง อาร์เรย์ว่าง พจนานุกรมว่าง ฯลฯ) ฟังก์ชันนี้จะเพิ่ม _JSONPathError หากเส้นทางที่ให้มาไม่ถูกต้อง (ไม่มีหรือไม่สามารถเข้าถึงได้) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
การเพิ่มคู่คีย์: ค่าแบบง่ายให้กับรูทของออบเจ็กต์
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'}
การเพิ่มวัตถุใหม่ให้กับอาร์เรย์ของวัตถุ
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'}]}
การเพิ่มคู่คีย์:ค่าให้กับแต่ละอ็อบเจ็กต์ของอาร์เรย์
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'}]}
การเพิ่มองค์ประกอบใหม่ให้กับอาร์เรย์ขององค์ประกอบ:
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)
ฟังก์ชันนี้จะอัปเดตค่าในคู่คีย์:ค่า และส่งคืนพจนานุกรม Python พร้อมเนื้อหาที่อัปเดต พารามิเตอร์ json_path:str ระบุเส้นทางไปยังคีย์:ค่า คู่/อาร์เรย์/ฯลฯ ผู้ปกครองที่ต้องได้รับการอัปเดต (หากต้องการอัปเดตค่าในรูทของวัตถุ JSON json_path จะต้องเท่ากับ '$') ในขณะที่พารามิเตอร์ key_or_index:Union[str, int] ระบุคีย์ (หากเป็นวัตถุ) หรือดัชนีอาร์เรย์ (หากเป็นอาร์เรย์) นี่หมายความว่าหากเราจำเป็นต้องอัปเดตคีย์ด้วยพาธ 'field0.field1.upd key' ดังนั้น _json_path จะเท่ากับ 'field0.field1' และพารามิเตอร์ key_or_index จะเท่ากับ 'upd key' _หมายเหตุ: หากคุณใช้ดัชนีอาร์เรย์ในขณะที่พารามิเตอร์ 'json_path' ชี้ไปที่ออบเจ็กต์ JSON หรือหากคุณใช้ชื่อคุณสมบัติในขณะที่ 'json_path' ชี้ไปที่อาร์เรย์ JSON ข้อยกเว้นจะเกิดขึ้น (ดูตัวอย่างด้านล่าง) new_value:any ระบุค่าที่จะเขียนทับค่าเก่าและ strict_mode:bool เปิดใช้งานโหมดเข้มงวด ตามค่าเริ่มต้นโหมดนี้จะปิดอยู่ หากเปิดใช้งาน เมธอดนี้จะช่วยให้แน่ใจว่าค่าใหม่มีประเภทเดียวกันกับค่าเก่า (หากค่าเก่าเป็นสตริง ค่าใหม่ก็ต้องเป็นสตริงด้วย ฯลฯ) หากประเภทไม่ตรงกัน จะเกิดข้อยกเว้นขึ้น
ฟังก์ชันนี้จะเพิ่มข้อยกเว้น IncorrectFunctionParameterTypeError คือพารามิเตอร์ (-s) มี (-ve) ประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้ยังจะเพิ่ม JSONStrictModeError ในกรณีที่ประเภทไม่ตรงกันหากเปิดใช้งานโหมด Strict และข้อยกเว้น JSONPathError หากเส้นทาง JSON ไม่ถูกต้อง (ไม่มีอยู่หรือไม่สามารถเข้าถึงได้) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
การอัพเดตคู่คีย์:ค่าในรูทของออบเจ็กต์:
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'}
กำลังอัปเดตรายการในอาร์เรย์:
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']}
การอัปเดตค่าด้วยโหมดเข้มงวด:
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]) ฟังก์ชันนี้จะลบองค์ประกอบออกจาก JSON และส่งคืนพจนานุกรม Python พร้อมเนื้อหาที่อัปเดต พารามิเตอร์ json_path:str ระบุเส้นทางไปยังคีย์:ค่า คู่/อาร์เรย์/ฯลฯ ผู้ปกครองที่ต้องการลบ (หากต้องการลบค่าในรูทของวัตถุ JSON json_path จะต้องเท่ากับ '$') ในขณะที่ พารามิเตอร์ key_or_index:Union[str, int] ระบุคีย์ (หากเป็นวัตถุ) หรือดัชนีอาร์เรย์ (หากเป็นอาร์เรย์) นี่หมายความว่าหากเราจำเป็นต้องลบคีย์ที่มีเส้นทาง 'field0.field1.del key' ดังนั้น _json_path จะเท่ากับ 'field0.field1' และพารามิเตอร์ key_or_index จะเท่ากับ 'del key' _หมายเหตุ: หากคุณใช้ดัชนีอาร์เรย์ในขณะที่พารามิเตอร์ 'json_path' ชี้ไปที่ออบเจ็กต์ JSON หรือหากคุณใช้ชื่อคุณสมบัติในขณะที่ 'json_path' ชี้ไปที่อาร์เรย์ JSON ข้อยกเว้นจะเกิดขึ้น (ดูตัวอย่างด้านล่าง) ฟังก์ชันนี้จะเพิ่มข้อยกเว้น IncorrectFunctionParameterTypeError คือพารามิเตอร์ (-s) มี (-ve) ประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะเพิ่มข้อยกเว้น JSONPathError หากเส้นทาง JSON ไม่ถูกต้อง (ไม่มีหรือไม่สามารถเข้าถึงได้) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
การลบคู่คีย์: ค่าในรูทของวัตถุ:
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'}
การลบรายการในอาร์เรย์:
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() ฟังก์ชั่นนี้จะลบการเยื้องทั้งหมดในไฟล์ JSON โดยพื้นฐานแล้วมันจะบีบอัด JSON ทั้งหมดให้เป็นบรรทัดเดียว
ฟังก์ชันนี้ไม่ส่งคืนค่าใดๆ
JsonFileParser.prettify(indent: int = 4) ฟังก์ชันนี้จะเพิ่มการเยื้องให้กับ JSON ในไฟล์ต้นฉบับเพื่อปรับปรุงความสามารถในการอ่าน เยื้อง: int พารามิเตอร์ระบุจำนวนช่องว่าง โดยค่าเริ่มต้นจะเท่ากับ 4 ฟังก์ชันนี้ตรงกันข้ามกับ JsonFileParser.minify() โดยสิ้นเชิง
ฟังก์ชันนี้ไม่ส่งคืนค่าใดๆ
ฟังก์ชันนี้จะเพิ่ม IncorrectFunctionParameterTypeError หากพารามิเตอร์มีประเภทที่ไม่ถูกต้อง
JsonFileParser.reset(discard_active_object: bool = False) ฟังก์ชันนี้จะรีเซ็ตออบเจ็กต์ JSON ที่ใช้งานอยู่ โดยลบการเปลี่ยนแปลงใดๆ ที่เกิดขึ้น พารามิเตอร์ discard_active_object:bool ควบคุมพฤติกรรมของฟังก์ชันนี้ที่เกี่ยวข้องกับอ็อบเจ็กต์ JSON ที่ใช้งานอยู่ (คุณสมบัติ JsonFileParser.active_json) หากตั้งค่าเป็น False เมธอดนี้จะส่งคืนออบเจ็กต์เริ่มต้นและเก็บการเปลี่ยนแปลงทั้งหมดใน actove JSON หากตั้งค่าเป็น True ฟังก์ชันนี้จะยังคงส่งคืนออบเจ็กต์เริ่มต้น แต่จะรีเซ็ตออบเจ็กต์ที่ใช้งานอยู่ด้วย และการเปลี่ยนแปลงทั้งหมดจะหายไปตลอดกาล
ฟังก์ชันนี้จะเพิ่ม IncorrectFunctionParameterTypeError หากพารามิเตอร์มีประเภทที่ไม่ถูกต้อง
ตัวอย่าง:
รับวัตถุเริ่มต้นและเก็บไว้ในตัวแปร:
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.
รับวัตถุเริ่มต้นและรีเซ็ตวัตถุที่ใช้งานอยู่:
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 = None, prettify: bool = True, create_file: bool = False) ฟังก์ชันนี้จะบันทึกอ็อบเจ็กต์ JSON ที่ใช้งานอยู่ในไฟล์ path:str พารามิเตอร์ระบุเส้นทางไปยังไฟล์ หากเว้นว่างไว้ ออบเจ็กต์ที่ใช้งานอยู่จะถูกบันทึกลงในไฟล์ต้นฉบับ prettify:bool พารามิเตอร์เปิดใช้งานการเยื้อง โดยค่าเริ่มต้นจะถูกตั้งค่าเป็น True หากตั้งค่าเป็น False JSON จะถูกบีบอัดเป็นบรรทัดเดียว พารามิเตอร์ create_file:bool ช่วยให้สามารถสร้างไฟล์ได้ หากตั้งค่าเป็น True ฟังก์ชันนี้จะสร้างไฟล์ใหม่และบันทึกอ็อบเจ็กต์ที่ใช้งานอยู่ที่นั่น แต่จะบังคับหากพารามิเตอร์ พาธ ชี้ไปที่ไฟล์ที่ไม่มีอยู่ หมายเหตุ: หากตั้งค่า create_file เป็น True และพาธชี้ไปยังไฟล์ที่มีอยู่ ข้อยกเว้นจะเกิดขึ้น
ฟังก์ชันนี้จะเพิ่ม JSONFileError หากไฟล์สุดท้ายไม่รองรับ JSON (มีส่วนขยายที่ไม่รองรับ) ฟังก์ชันนี้จะเพิ่ม FileExistsError หากตั้งค่า create_file เป็น True และมีไฟล์อยู่แล้วภายใต้เส้นทางที่ระบุ ฟังก์ชันนี้จะเพิ่ม FileNotFoundError หาก create_file ถูกตั้งค่าเป็น False และไฟล์ไม่สามารถอยู่ภายใต้เส้นทางที่ระบุ ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
บันทึกวัตถุที่ใช้งานอยู่ในไฟล์ต้นฉบับ:
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.
บันทึกวัตถุที่ใช้งานอยู่ในไฟล์อื่น (ที่มีอยู่):
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.
บันทึกวัตถุที่ใช้งานอยู่ในไฟล์อื่น (ไม่มีอยู่):
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.
โมดูลนี้มีวิธีการต่างๆ สำหรับการทำงานกับออบเจ็กต์ JSON โดยตรงผ่านคลาส JsonObjectParser คลาสนี้ได้รับการออกแบบมาโดยเฉพาะเพื่อทำงานกับ JSON ที่ได้รับจากการเรียก API หรือเพื่อใช้ใน API หากต้องการเข้าถึง เพียงนำเข้า JsonObjectParser จากโมดูลไฟล์:
from robust_json.object import JsonObjectParser
และเริ่มต้นมัน:
op = JsonObjectParser(json_obj)
หมายเหตุ: ขณะนี้ JsonObjectParser รองรับการบันทึกอัตโนมัติแล้ว หากเปิดใช้งาน โมดูลจะบันทึกออบเจ็กต์ที่ใช้งานอยู่หลังจากการเปลี่ยนแปลงทุกครั้งที่ทำและเขียนลงในไฟล์ที่ระบุ
หากต้องการเปิดใช้งานการบันทึกอัตโนมัติ เพียงเริ่มต้นโมดูลนี้ด้วยพารามิเตอร์ autosave
ที่ตั้งค่าเป็น True
:
op = JsonObjectParser(json_object, autosave=True)
หมายเหตุ: คุณยังสามารถระบุไฟล์สำหรับโปรแกรมบันทึกอัตโนมัติได้ เพียงส่งพารามิเตอร์ autosave_path
พร้อมพาธไปยังไฟล์ของคุณในระหว่างการเริ่มต้น เช่นนี้
op = JsonObjectParser(json_object, autosave=True, autosave_path=path_to_autosave_file)
หากไม่มีไฟล์อยู่ โมดูลจะสร้างขึ้นมา หากมีไฟล์อยู่ ไฟล์นั้นจะถูกตัดทอนและเต็มไปด้วยอ็อบเจ็กต์ที่ใช้งานอยู่แบบอนุกรม
ในระหว่างการเริ่มต้นอาจมีการยกข้อยกเว้น IncorrectFunctionParameterTypeError ซึ่งหมายความว่าพารามิเตอร์ json มีประเภทที่ไม่ถูกต้อง
คุณสมบัติ :
JsonObjectParser.active_json คุณสมบัตินี้ส่งคืนอ็อบเจ็กต์ JSON ที่มีการเปลี่ยนแปลงล่าสุดทั้งหมด
JsonObjectParser.backup คุณสมบัตินี้ส่งคืนอ็อบเจ็กต์ JSON เริ่มต้น โดยไม่สนใจการเปลี่ยนแปลงล่าสุดทั้งหมด คุณสมบัติสุดท้ายทั้งสองนี้อาจทำให้เกิดความสับสน ดังนั้นนี่คือตัวอย่าง ( หมายเหตุ: ดูส่วนเอกสารที่เกี่ยวข้องสำหรับฟังก์ชัน 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.
วิธีการ :
JsonObjectParser.get_key_value(json_path: str) เมธอดนี้เข้าถึงค่าจากคู่คีย์:ค่าเฉพาะในออบเจ็กต์ JSON และส่งคืนค่านั้น พารามิเตอร์ json_path:str ระบุเส้นทางไปยังคู่ของคีย์:ค่า (เช่น field0.field1.[...].fieldn) ตัวอย่าง:
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
ฟังก์ชันนี้จะเพิ่ม IncorrectFunctionParameterTypeError เนื่องจากพารามิเตอร์มีประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะเพิ่ม JSONPathError หากเส้นทาง JSON ที่ระบุไม่ถูกต้อง (ไม่มีหรือไม่สามารถเข้าถึงได้) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
JsonObjectParser.append(json_path: str, append_value: any, append_at_end: bool = False) เมธอดนี้จะเพิ่มค่าต่อท้ายออบเจ็กต์ JSON ที่มีอยู่ และส่งกลับพจนานุกรม Python พร้อมเนื้อหาที่อัปเดต พารามิเตอร์ json_path:str ระบุเส้นทางที่จะเพิ่มค่าใหม่ หากต้องการเพิ่มค่าต่อท้ายรากของวัตถุ JSON json_path จะต้องเท่ากับ '$' append_value:พารามิเตอร์ใดๆ ระบุค่าที่จะถูกผนวก append_at_end:bool ควบคุมการทำงานของฟังก์ชันนี้ที่เกี่ยวข้องกับอาร์เรย์ JSON ของอ็อบเจ็กต์ (โครงสร้างเช่นนี้: [{}, {}, {}, ...]) และอาร์เรย์ทั่วไป (โครงสร้างเช่นนี้: [a, b, c, . ..]) มันไม่มีผลกระทบต่อโครงสร้างอื่นๆ หากตั้งค่าเป็น False ฟังก์ชันจะพยายามเพิ่มค่าที่กำหนดในแต่ละออบเจ็กต์ของอาร์เรย์ หากตั้งค่าเป็น True ฟังก์ชันจะพยายามต่อท้ายค่าที่กำหนดที่ส่วนท้ายของอาร์เรย์ (ดูตัวอย่างด้านล่าง) ฟังก์ชันนี้จะส่งคืนพจนานุกรม Python พร้อม JSON ที่อัปเดต
ฟังก์ชันนี้จะเพิ่มข้อยกเว้น IncorrectFunctionParameterTypeEroor หากพารามิเตอร์ (-s) มี (-ve) ประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะเพิ่มข้อยกเว้น ValueError หาก ' ค่าต่อท้าย' ว่างเปล่า (สตริงว่าง อาร์เรย์ว่าง พจนานุกรมว่างเปล่า) ฟังก์ชันนี้จะเพิ่ม _JSONPathError หากเส้นทางที่ให้มาไม่ถูกต้อง (ไม่มีหรือไม่สามารถเข้าถึงได้) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
การเพิ่มคู่คีย์: ค่าแบบง่ายให้กับรูทของออบเจ็กต์
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'}
การเพิ่มวัตถุใหม่ให้กับอาร์เรย์ของวัตถุ
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'}]}
การเพิ่มคู่คีย์:ค่าให้กับแต่ละอ็อบเจ็กต์ของอาร์เรย์
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'}]}
การเพิ่มองค์ประกอบใหม่ให้กับอาร์เรย์ขององค์ประกอบ:
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)
ฟังก์ชันนี้จะอัปเดตค่าในคู่คีย์:ค่า และส่งคืนพจนานุกรม Python พร้อมเนื้อหาที่อัปเดต พารามิเตอร์ json_path:str ระบุเส้นทางไปยังคีย์:ค่า คู่/อาร์เรย์/ฯลฯ ผู้ปกครองที่ต้องได้รับการอัปเดต (หากต้องการอัปเดตค่าในรูทของวัตถุ JSON json_path จะต้องเท่ากับ '$') ในขณะที่พารามิเตอร์ key_or_index:Union[str, int] ระบุคีย์ (หากเป็นวัตถุ) หรือดัชนีอาร์เรย์ (หากเป็นอาร์เรย์) นี่หมายความว่าหากเราจำเป็นต้องอัปเดตคีย์ด้วยพาธ 'field0.field1.upd key' ดังนั้น _json_path จะเท่ากับ 'field0.field1' และพารามิเตอร์ key_or_index จะเท่ากับ 'upd key' _หมายเหตุ: หากคุณใช้ดัชนีอาร์เรย์ในขณะที่พารามิเตอร์ 'json_path' ชี้ไปที่ออบเจ็กต์ JSON หรือหากคุณใช้ชื่อคุณสมบัติในขณะที่ 'json_path' ชี้ไปที่อาร์เรย์ JSON ข้อยกเว้นจะเกิดขึ้น (ดูตัวอย่างด้านล่าง) new_value:any ระบุค่าที่จะเขียนทับค่าเก่าและ strict_mode:bool เปิดใช้งานโหมดเข้มงวด ตามค่าเริ่มต้นโหมดนี้จะปิดอยู่ หากเปิดใช้งาน เมธอดนี้จะช่วยให้แน่ใจว่าค่าใหม่มีประเภทเดียวกันกับค่าเก่า (หากค่าเก่าเป็นสตริง ค่าใหม่ก็ต้องเป็นสตริงด้วย ฯลฯ) หากประเภทไม่ตรงกัน จะเกิดข้อยกเว้นขึ้น
ฟังก์ชันนี้จะเพิ่มข้อยกเว้น IncorrectFunctionParameterTypeError คือพารามิเตอร์ (-s) มี (-ve) ประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้ยังจะเพิ่ม JSONStrictModeError ในกรณีที่ประเภทไม่ตรงกันหากเปิดใช้งานโหมด Strict และข้อยกเว้น JSONPathError หากเส้นทาง JSON ไม่ถูกต้อง (ไม่มีอยู่หรือไม่สามารถเข้าถึงได้) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
การอัพเดตคู่คีย์:ค่าในรูทของออบเจ็กต์:
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'}
กำลังอัปเดตรายการในอาร์เรย์:
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']}
การอัปเดตค่าด้วยโหมดเข้มงวด:
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]) ฟังก์ชันนี้จะลบองค์ประกอบออกจาก JSON และส่งคืนพจนานุกรม Python พร้อมเนื้อหาที่อัปเดต พารามิเตอร์ json_path:str ระบุเส้นทางไปยังคีย์:ค่า คู่/อาร์เรย์/ฯลฯ ผู้ปกครองที่ต้องการลบ (หากต้องการลบค่าในรูทของวัตถุ JSON json_path จะต้องเท่ากับ '$') ในขณะที่ พารามิเตอร์ key_or_index:Union[str, int] ระบุคีย์ (หากเป็นวัตถุ) หรือดัชนีอาร์เรย์ (หากเป็นอาร์เรย์) นี่หมายความว่าหากเราจำเป็นต้องลบคีย์ที่มีเส้นทาง 'field0.field1.del key' ดังนั้น _json_path จะเท่ากับ 'field0.field1' และพารามิเตอร์ key_or_index จะเท่ากับ 'del key' _หมายเหตุ: หากคุณใช้ดัชนีอาร์เรย์ในขณะที่พารามิเตอร์ 'json_path' ชี้ไปที่ออบเจ็กต์ JSON หรือหากคุณใช้ชื่อคุณสมบัติในขณะที่ 'json_path' ชี้ไปที่อาร์เรย์ JSON ข้อยกเว้นจะเกิดขึ้น (ดูตัวอย่างด้านล่าง) ฟังก์ชันนี้จะเพิ่มข้อยกเว้น IncorrectFunctionParameterTypeError คือพารามิเตอร์ (-s) มี (-ve) ประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะเพิ่มข้อยกเว้น JSONPathError หากเส้นทาง JSON ไม่ถูกต้อง (ไม่มีหรือไม่สามารถเข้าถึงได้) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
การลบคู่คีย์: ค่าในรูทของวัตถุ:
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'}
การลบรายการในอาร์เรย์:
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) ฟังก์ชันนี้จะรีเซ็ตออบเจ็กต์ JSON ที่ใช้งานอยู่ โดยลบการเปลี่ยนแปลงใดๆ ที่เกิดขึ้น พารามิเตอร์ discard_active_object:bool ควบคุมพฤติกรรมของฟังก์ชันนี้ที่เกี่ยวข้องกับอ็อบเจ็กต์ JSON ที่ใช้งานอยู่ (คุณสมบัติ JsonObjectParser.active_json) หากตั้งค่าเป็น False เมธอดนี้จะส่งคืนออบเจ็กต์เริ่มต้นและเก็บการเปลี่ยนแปลงทั้งหมดใน actove JSON หากตั้งค่าเป็น True ฟังก์ชันนี้จะยังคงส่งคืนออบเจ็กต์เริ่มต้น แต่จะรีเซ็ตออบเจ็กต์ที่ใช้งานอยู่ด้วย และการเปลี่ยนแปลงทั้งหมดจะหายไปตลอดกาล
ฟังก์ชันนี้จะเพิ่ม IncorrectFunctionParameterTypeError หากพารามิเตอร์มีประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
รับวัตถุเริ่มต้นและเก็บไว้ในตัวแปร:
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
รับวัตถุเริ่มต้นและรีเซ็ตวัตถุที่ใช้งานอยู่:
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) ฟังก์ชันนี้จะบันทึกอ็อบเจ็กต์ JSON ที่ใช้งานอยู่ในไฟล์ path:str พารามิเตอร์ระบุเส้นทางไปยังไฟล์ prettify:bool พารามิเตอร์เปิดใช้งานการเยื้อง โดยค่าเริ่มต้นจะถูกตั้งค่าเป็น True หากตั้งค่าเป็น False JSON จะถูกบีบอัดเป็นบรรทัดเดียว พารามิเตอร์ create_file:bool ช่วยให้สามารถสร้างไฟล์ได้ หากตั้งค่าเป็น True ฟังก์ชันนี้จะสร้างไฟล์ใหม่และบันทึกอ็อบเจ็กต์ที่ใช้งานอยู่ที่นั่น แต่จะบังคับหากพารามิเตอร์ พาธ ชี้ไปที่ไฟล์ที่ไม่มีอยู่ หมายเหตุ: หากตั้งค่า create_file เป็น True และพาธชี้ไปยังไฟล์ที่มีอยู่ ข้อยกเว้นจะเกิดขึ้น
ฟังก์ชันนี้จะเพิ่ม JSONFileError หากไฟล์สุดท้ายไม่รองรับ JSON (มีส่วนขยายที่ไม่รองรับ) ฟังก์ชันนี้จะเพิ่ม FileExistsError หาก cheate_file ถูกตั้งค่าเป็น True และมีไฟล์อยู่แล้วภายใต้เส้นทางที่ระบุ ฟังก์ชันนี้จะเพิ่ม FileNotFoundError หาก create_file ถูกตั้งค่าเป็น False และไฟล์ไม่สามารถอยู่ภายใต้เส้นทางที่ระบุ ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
บันทึกวัตถุที่ใช้งานอยู่ในไฟล์ (ที่มีอยู่):
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.
การบันทึกวัตถุที่ใช้งานอยู่ในไฟล์ (ไม่มีอยู่):
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.
โมดูลนี้มีข้อยกเว้นแบบกำหนดเองทั้งหมดที่สามารถเพิ่มได้ในระหว่างรันไทม์ของแพ็คเกจ มีทั้งหมด 5 รายการ: JSONFileError , JSONPathError , JSONStrictModeError , JSONObjectError , IncorrectFunctionParameterTypeError หากคุณต้องการนำเข้า สามารถทำได้ดังนี้:
import robust_json.errors as json_err
filter_json_array(json_array: list, field: string, value: any) ฟังก์ชั่นนี้จะกรองอาร์เรย์ที่กำหนดของอ็อบเจ็กต์ JSON แล้วส่งคืน พารามิเตอร์ json_array:list ระบุรายการที่จำเป็นต้องกรอง field:str ระบุคีย์และ value:any ระบุค่า พารามิเตอร์สองตัวสุดท้ายจะสร้างคู่คีย์:ค่าซึ่งมีบทบาทเป็นตัวกรอง
ฟังก์ชั่นนี้จะส่งคืนรายการที่มีเนื้อหาที่ถูกกรอง
ฟังก์ชันนี้จะเพิ่มข้อยกเว้น IncorrectFunctionParameterTypeError หากพารามิเตอร์อย่างน้อยหนึ่งรายการมีประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะเพิ่ม JSONObjectError หาก json_arr ไม่ใช่อาร์เรย์ของอ็อบเจ็กต์ ([{}, {}, {}, ...]) ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง: การกรองอาร์เรย์ของออบเจ็กต์ด้วยคู่คีย์:ค่าเฉพาะ
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) ฟังก์ชันนี้จะค้นหา intem ในอาร์เรย์ที่กำหนดและส่งกลับดัชนี (-es) item:any ระบุรายการที่จำเป็นต้องค้นหาดัชนี array:list ระบุอาร์เรย์ที่ต้องมีรายการนี้และ Always_array:bool ควบคุมประเภทการส่งคืนของฟังก์ชันนี้ หากตั้งค่าเป็น False ฟังก์ชันนี้จะส่งคืนอาร์เรย์หากมีการจับคู่หลายรายการ แต่จะส่งกลับจำนวนเต็มหากมีการจับคู่เพียงรายการเดียว หากตั้งค่าเป็น True ฟังก์ชันนี้จะส่งคืนอาร์เรย์เสมอ (ดูตัวอย่างด้านล่าง)
ตัวอย่าง:
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) ฟังก์ชั่นนี้จะย้อนกลับอาร์เรย์และส่งคืน
ฟังก์ชันนี้จะเพิ่ม IncorrectFunctionParameterTypeError หากพารามิเตอร์มีประเภทที่ไม่ถูกต้อง ฟังก์ชันนี้จะทำให้เกิดข้อยกเว้นเพิ่มเติมหากเกิดขึ้น
ตัวอย่าง:
from robust_json.ext import reverse_array
arr = ['a', 'b', 'c']
rev_arr = reverse_array(arr)
print(rev_arr)
# Output: ['c', 'b', 'a']