safejson通过抑制解析对象上的索引器错误和keyerror异常,简化了在python中使用json对象的过程。
safeJSON的Python项目详细描述
——
safejson版本0.9 beta
——
(c)2013纽约时报公司python"json"模块。这些新方法返回的对象永远不会为"缺少"值引发"索引器错误"或"keyerror"异常。而是返回一个特殊值"safenone"。safenone'本身可以被任何键或索引订阅。这样做将返回另一个safenone对象,以便safenone[<;key index>;]==safenone。实际上,这应该允许开发人员大幅减少在野外处理json所需的检查次数。
-
-
重要提示
-
-
而不是引发缺少值的异常,"safejson"返回一个特殊值"safenone"。在代码中,可以将此值视为与"none"相同,但有一个主要异常。SafeNone对象与None对象不同,因此对以下表单的检查将计算为False。
如果SafeNone为None:
SafeNone与None不相等,但是,因此,如果safenone==none,下面的检查将计算为true
:
另外,safenone实现python列表和dict接口中的所有方法,但尝试存储或修改safenone对象的方法除外。这些方法将引发异常。
因此,您可以生成如下语句:
,但这样的语句将引发异常:
safenone
*\u setitem\uu
*\u imul\u
*\u setslice\u
*\u setitem\u
*append
*extend
*fromkeys
*insert
*setdefault
*update
----
安装
----
要安装safejson,只需将其更改到目录中即可。包含此自述文件并键入以下命令
=--
方法从json源解析python对象。例如:
导入json
{"结果":[{
"子项":[{
"名称":"子项1"
}",
"name":"result 1"
}
"
o=json.loads(json-string)
现在假设我们要打印第一个"result"的第一个"child-item"的"name"属性的值。我们可以简单地写:
在一般情况下,如果不首先验证json对象中的字段是否存在,则访问该对象中的字段通常是不可取的。毕竟,访问不存在的字段将引发"索引器错误"或"keyerror"。因此,我们应该修改代码,使其看起来像这样。
if‘results’in o and len(o['results'])>;0:
result=o['results'][0]
if‘child_items’in result and len(result['child_items'])>;0:
childitem=result['child\u items'][0]
如果childitem中的'name':
print childitem['name']
此外,编写这类检查的繁琐代码可能会导致一些开发人员完全忽略它们,导致代码脆弱,对可能遇到的输入类型做出危险的狭窄假设。
safejson通过引入"load s"和"load"方法来解决此问题,这些方法返回的对象永远不会引发"indexerror"或"keyerror"异常。因此,我们可以将上面的代码编写为
import safejson
o=safejson.loads(json_string)
如果要在指定值不存在的情况下抑制输出,请打印o['results'][0]['child-items'][0]['name']
我们可以引入一个简单的检查,如果值不存在,它的计算结果将始终为false。
假设,对于上面的例子,我们想要遍历第二个结果(不存在)的所有"子项"。我们可以写:
o['results'][1]['child-items']:
在o['results'][1]['child\items'][0].items():
x=len(o["结果"][1]["子项"])
打印x将打印0
在这种情况下,长度始终为零。
safejson版本0.9 beta
——
(c)2013纽约时报公司python"json"模块。这些新方法返回的对象永远不会为"缺少"值引发"索引器错误"或"keyerror"异常。而是返回一个特殊值"safenone"。safenone'本身可以被任何键或索引订阅。这样做将返回另一个safenone对象,以便safenone[<;key index>;]==safenone。实际上,这应该允许开发人员大幅减少在野外处理json所需的检查次数。
-
-
重要提示
-
-
而不是引发缺少值的异常,"safejson"返回一个特殊值"safenone"。在代码中,可以将此值视为与"none"相同,但有一个主要异常。SafeNone对象与None对象不同,因此对以下表单的检查将计算为False。
如果SafeNone为None:
SafeNone与None不相等,但是,因此,如果safenone==none,下面的检查将计算为true
:
另外,safenone实现python列表和dict接口中的所有方法,但尝试存储或修改safenone对象的方法除外。这些方法将引发异常。
因此,您可以生成如下语句:
,但这样的语句将引发异常:
safenone
*\u setitem\uu
*\u imul\u
*\u setslice\u
*\u setitem\u
*append
*extend
*fromkeys
*insert
*setdefault
*update
----
安装
----
要安装safejson,只需将其更改到目录中即可。包含此自述文件并键入以下命令
=--
方法从json源解析python对象。例如:
导入json
"子项":[{
"名称":"子项1"
}",
"name":"result 1"
}
"
o=json.loads(json-string)
现在假设我们要打印第一个"result"的第一个"child-item"的"name"属性的值。我们可以简单地写:
在一般情况下,如果不首先验证json对象中的字段是否存在,则访问该对象中的字段通常是不可取的。毕竟,访问不存在的字段将引发"索引器错误"或"keyerror"。因此,我们应该修改代码,使其看起来像这样。
if‘results’in o and len(o['results'])>;0:
result=o['results'][0]
if‘child_items’in result and len(result['child_items'])>;0:
childitem=result['child\u items'][0]
如果childitem中的'name':
print childitem['name']
此外,编写这类检查的繁琐代码可能会导致一些开发人员完全忽略它们,导致代码脆弱,对可能遇到的输入类型做出危险的狭窄假设。
safejson通过引入"load s"和"load"方法来解决此问题,这些方法返回的对象永远不会引发"indexerror"或"keyerror"异常。因此,我们可以将上面的代码编写为
import safejson
o=safejson.loads(json_string)
如果要在指定值不存在的情况下抑制输出,请打印o['results'][0]['child-items'][0]['name']
我们可以引入一个简单的检查,如果值不存在,它的计算结果将始终为false。
假设,对于上面的例子,我们想要遍历第二个结果(不存在)的所有"子项"。我们可以写:
o['results'][1]['child-items']:
在o['results'][1]['child\items'][0].items():
x=len(o["结果"][1]["子项"])
打印x将打印0
在这种情况下,长度始终为零。