[英]Converting a JSON file into Python Objects
我有一個 JSON 文件,我想將其放入 python 對象中。 它有兩個部分,員工和資產,我想將它們加載到兩個獨立的部分中。 這是 JSON 文件的示例:
{
"staff": [
{
"id": "DA7153",
"name": [
"Fran\u00c3\u00a7ois",
"Ullman"
],
"department": {
"name": "Admin"
},
"server_admin": "true"
},
{
"id": "DA7356",
"name": [
"Bob",
"Johnson"
],
"department": {
"name": "Admin"
},
"server_admin": "false"
},
],
"assets": [
{
"asset_name": "ENGAGED SLOTH",
"asset_type": "File",
"owner": "DA8333",
"details": {
"security": {
"cia": [
"HIGH",
"INTERMEDIATE",
"LOW"
],
"data_categories": {
"Personal": "true",
"Personal Sensitive": "true",
"Customer Sensitive": "true"
}
},
"retention": 2
},
"file_type": "Document",
"server": {
"server_name": "ISOLATED UGUISU",
"ip": [
10,
234,
148,
52
]
}
},
{
"asset_name": "ISOLATED VIPER",
"asset_type": "File",
"owner": "DA8262",
"details": {
"security": {
"cia": [
"LOW",
"HIGH",
"LOW"
],
"data_categories": {
"Personal": "false",
"Personal Sensitive": "false",
"Customer Sensitive": "true"
}
},
"retention": 2
},
},
]
我試圖為員工創建一個類,但每當我這樣做時,我都會收到錯誤“TypeError:dict 最多需要 1 個參數,得到 3”
我正在使用的代碼如下所示:
import json
with open('Admin_sample.json') as f:
admin_json = json.load(f)
class staffmem(admin_json):
def __init__(self, id, name, department, server_admin):
self.id = id
self.name = name
self.deparment = department[name]
self.server_admin = server_admin
def staffid(self):
return self.id
print(staffmem.staffid)
我就是搞不定。 任何幫助,將不勝感激。
謝謝。
以下應該是一個很好的起點,但您必須解決一些問題。 請注意,如果密鑰不存在,我會在任何地方使用get()
來提供“安全”默認值:
import json
class StaffMember:
def __init__(self, json_entry):
self.name = ",".join(json_entry.get("name"))
self.id = json_entry.get("id")
self.dept = json_entry.get("department", {}).get("name")
self.server_admin = (
True
if json_entry.get("server_admin", "false").lower() == "true"
else False
)
# Get the data
with open("/tmp/test.data") as f:
data = json.load(f)
# For every entry in the data["staff"] create object and index them by ID
all_staff = {}
for json_entry in data.get("staff", []):
tmp = StaffMember(json_entry)
all_staff[tmp.id] = tmp
print(all_staff)
print(all_staff['DA7153'].name)
輸出:
$ python3 /tmp/test.py
{'DA7153': <__main__.StaffMember object at 0x1097b2d50>, 'DA7356': <__main__.StaffMember object at 0x1097b2d90>}
François,Ullman
潛在的改進:
from_json()
靜態方法來創建您的對象,而不是在 ctor 中傳遞 json dict筆記:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.