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

在这种情况下,长度始终为零。




欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
选项卡内的java 安卓工具栏   java接口VS API VS公共类   无法解析java。lang.ClassNotFoundException:在安卓 studio中找不到类“com.example.安卓.camera2basic.AutoFitTextureView”?   java等待线程正常完成   java在JTable中的prepareRenderer方法中编辑单元格数据是否可行?   java SessionNotCreatedException selenium webdriver   java Android Studio Gradle CreateProcess错误=2   java找不到适用于异常(int)的构造函数   javascript如何在不使用正则表达式的情况下检查输入是否为表情符号?   从JAVA运行ant时,JAVA_HOME变量不正确   long的java min值引发异常   java如何在这段代码中实现侦听器?   带有透明文本的java Android按钮   图像Java扫描仪问题(JFrame)   java模拟输入蒸汽似乎在Junit测试的第一次输入中就被吃掉了   压缩Java Deflater,现在和将来的结果相同(确定性)   java JTable getModel()。setValueAt从数组中删除第一个元素   java我有不同于编译器和计算器的价值   使用C#客户端调用基本身份验证java webservice   java相同类型的多个@Embedded字段在持久化后始终为空