一个优雅的字典和json处理程序
dictor的Python项目详细描述
听写器-字典医生
一个优雅的字典和json处理程序
0.1.2版
dictor是一个与python 2和3兼容的json/字典处理程序。
dictor获取字典或json数据并返回特定键的值。
如果dictor找不到键的值,或者json或dictionary数据缺少键,则返回值为none或您提供的任何回退值。
dictor很有礼貌,在解析大型字典/json时通常会遇到异常错误。
使用DISTROR消除了在处理大型JSON结构的查找时重复使用代码中的TIV/BULD块,并提供了在丢失的键/值上插入回退值的灵活性。
安装
pip install dictor
用法
sample.json
{
"characters": {
"Lonestar": {
"id": 55923,
"role": "renegade",
"items": [
"space winnebago",
"leather jacket"
]
},
"Barfolomew": {
"id": 55924,
"role": "mawg",
"items": [
"peanut butter jar",
"waggy tail"
]
},
"Dark Helmet": {
"id": 99999,
"role": "Good is dumb",
"items": [
"Shwartz",
"helmet"
]
},
"Skroob": {
"id": 12345,
"role": "Spaceballs CEO",
"items": [
"luggage"
]
}
}
}
现在让我们获取所有字符的信息
from dictor import dictor
with open('sample.json') as data:
data = json.load(data)
print(dictor(data, 'characters'))
{u'Lonestar': {u'items': [u'space winnebago', u'leather jacket'], u'role': u'renegade', u'id': 55923}, u'Dark Helmet': {u'items': [u'Shwartz', u'helmet'], u'role': u'Good is dumb', u'id': 99999}, u'Barfolomew': {u'items': [u'peanut butter jar', u'waggy tail'], u'role': u'mawg', u'id': 55924}, u'Skroob': {u'items': [u'luggage'], u'role': u'Spaceballs CEO', u'id': 12345}}
获取深色头盔的详细信息
print(dictor(data, 'characters.Dark Helmet.items'))
[u'Shwartz', u'helmet']
您还可以传递一个标志来忽略字母的上/下大小写,
print(dictor(data, 'characters.dark helmet.items', ignorecase=True))
仅获取字符的第一项
print(dictor(data, 'characters.Dark Helmet.items.0'))
Shwartz
回退值和错误处理
默认情况下,如果字典不包含您的搜索路径,dictor将返回none,
print(dictor(data, 'characters.Princess Leia'))
None
您可以通过传递 default=“回退值”或只放置回退字符串,
print(dictor(data, 'characters.Princess Leia', default='Not in Spaceballs'))
Not in spaceballs
或者添加一个备用字符串,
print(dictor(data, 'characters.Princess Leia', 'fallback to this'))
fallback to this
如果您想在none值上出错,只需提供checknone标志,就会引发value error。
print(dictor(data, 'characters.Princess Leia', checknone=True))
Traceback (most recent call last):
File "test.py", line 14, in <module>
print(dictor(data, 'characters.Princess Leia', checknone=True))
File "/github.com/dictor/dictor/__init__.py", line 77, in dictor
raise ValueError('missing value for %s' % path)
ValueError: value not found for search path: "characters.Princess Leia"
将变量传递到搜索路径
如果需要将变量传递到搜索路径中
who = "Barfolomew"
print(dictor(data, "characters.{}.id".format(who)))
55924
如果使用python 3,还可以使用f字符串
who = "Barfolomew"
print(dictor(data, f"characters.{who}.id"))
听写列表
如果整个json结构是一个列表
[
{
"color": "red",
"value": "#f00"
},
{
"color": "green",
"value": "#0f0"
},
{
"color": "blue",
"value": "#00f"
}
]
只需在搜索路径中提供列表索引
print(dictor(data, ‘2.color’))
blue
列表的嵌套列表
要解析列表和dict的复杂嵌套列表,只需在搜索路径中提供列表索引
[
{
"type": "json",
"message": [
[
{
"english": "apple",
"spanish": "manzana"
},
{
"english": "banana",
"spanish": "platano"
}
],
[
{
"english": "cherry",
"spanish": "cereza"
},
{
"english": "durian",
"spanish": "durian",
"color": [
"black",
"brown",
"orange"
]
}
]
]
}
]
dictor将按层次结构分析每个查找元素,从top开始,一直到最后一个元素,读取每个点分隔的列表索引。
print(dictor(data, '0.message.1.1.color.2'))
orange
使用点处理关键查找
如果需要查找键名中有点的键值,例如
{
"dirty.harry": {
"year": 1977,
"genre": "romance"
},
}
搜索dictor(data,'dirty.harry')将返回none,因为dictor将点分隔的条目视为两个单独的键。
要搜索包含点的键,只需使用转义字符“\”,
dictor(data, 'dirty\.harry')
{u'genre': u'romance', u'year': 1977}
测试
测试使用python nose完成。测试位于“tests”目录中。
pip install nose
shell> nosetests test.py
发行说明
0.1.2
- 修复了查找错误
0.1.1
删除了“eval()”功能以增加安全性
整个查找引擎被重写,以提高速度和简化
添加了“ignorecase”参数
为带有点的键添加了转义点字符的功能
查找列表索引已修改,
在以前的版本中,查找元素的方式如下所示,
dictor(data, 'characters.Dark Helmet.items[0]')
新的语法是将所有内容放置为点分隔的路径,这创建了一个单一的查找标准,即
dictor(data, 'characters.Dark Helmet.items.0')
0.0.1
- 初始项目发布
贡献者
- 迈克·里德(愿施瓦茨一家与您同在)