Python数据处理, 使用json表达式获取json数据值
已于 2025年10月12日 18:12 修改
访问次数:0
from collections import abc
class FrozenJson:
'''一个只读接口,该接口使用属性表示法访问json类对象
'''
def __init__(self, mmapping):
self.__data = dict(mmapping)
def __getattr__(self, name):
try:
return getattr(self.__data, name)
except AttributeError:
return FrozenJson.build(self.__data[name])
def __dir__(self):
return self.__data.keys()
@classmethod
def build(cls, obj):
if isinstance(obj, abc.Mapping):
return cls(obj)
elif isinstance(obj, (list, tuple)):
return [cls.build(item) for item in obj]
else:
return obj二、测试示例:
json_data:
{ "Schedule":
{ "conferences": [{"serial": 115 }],
"events": [
{ "serial": 34505,
"name": "Why Schools Don´t Use Open Source to Teach Programming",
"event_type": "40-minute conference session",
"time_start": "2014-07-23 11:30:00",
"time_stop": "2014-07-23 12:10:00",
"venue_serial": 1462,
"description": "Aside from the fact that high school programming...",
"website_url": "http://oscon.com/oscon2014/public/schedule/detail/34505",
"speakers": [157509],
"categories": ["Education"] }
],
"speakers": [
{ "serial": 157509,
"name": "Robert Lefkowitz",
"photo": null,
"url": "http://sharewave.com/",
"position": "CTO",
"affiliation": "Sharewave",
"twitter": "sharewaveteam",
"bio": "Robert ´r0ml´ Lefkowitz is the CTO at Sharewave, a startup..." }
],
"venues": [
{ "serial": 1462,
"name": "F151",
"category": "Conference Venues" }
]
}
}二、测试示例
test_Fronzen.py
def test_FrozeJson():
import json
raw_json = json.load(open('./FrozenJson/osconfeed.json', 'r'))
from ..FrozenJson.FrozenJson import FrozenJson
obj = FrozenJson(raw_json)
target = 'obj.Schedule.conferences[0].serial'
assert eval(target) == 115
评论(0)