python - 获取 AttributeError 解析 JSON 数据
问题描述
我从服务器获取 JSON 数据,我需要单独解析它,当我这样做时,SimpleNamespace
我遇到了问题。如何解析这些数据?
示例数据:
{
"version":"1.0",
"packageName":"com.some.thing",
"eventTimeMillis":"1503349566168",
"subscriptionNotification":
{
"version":"1.0",
"notificationType":4,
"purchaseToken":"PURCHASE_TOKEN",
"subscriptionId":"my.sku"
}
}
我的代码:
import json
from types import SimpleNamespace
def callback(message):
x = json.loads(message.data, object_hook=lambda d: SimpleNamespace(**d))
print("Version: " + x.version)
print("Package Name: " + x.packageName)
print("Time Milis: " + x.eventTimeMillis)
print("Token: " + x.subscriptionNotification.purchaseToken)
print("Product: " + x.subscriptionNotification.subscriptionId)
print("Type: " + str(x.subscriptionNotification.notificationType))
错误:
AttributeError: 'types.SimpleNamespace' object has no attribute 'subscriptionNotification'
解决方案
在此示例中,我们从字典开始。从那时起,代码就很少了,整个事情就变成了“表驱动”。例如,如果您的字典结构发生更改,因此您向顶层添加了一个新键,那么您只需对 L1 表进行相应的更改。希望这会给你一些关于如何进行的想法:
D = {
"version": "1.0",
"packageName": "com.some.thing",
"eventTimeMillis": "1503349566168",
"subscriptionNotification":
{
"version": "1.0",
"notificationType": 4,
"purchaseToken": "PURCHASE_TOKEN",
"subscriptionId": "my.sku"
}
}
def doPrint(d, L):
if d:
for _l in L:
print(f'{_l[0]}: {d.get(_l[1], "n/a")}')
L1 = [['Version', 'version'],
['Package Name', 'packageName'],
['Time Millis', 'eventTimeMillis']
]
L2 = [['Token', 'purchaseToken'],
['Product', 'subscriptionId'],
['Type', 'notificationType']
]
doPrint(D, L1)
doPrint(D.get('subscriptionNotification', None), L2)
推荐阅读
- google-app-engine - 如何在 Google App Engine Java8 中关闭 org.eclipse.jetty 日志?
- excel - VBA 下拉列表
- python - 如何在用户猜测数字时修复python上的负数
- server - Ghost 博客:Google Compute Engine - 意外关闭连接
- php - 什么会导致我的 ajax 无法执行所有命令?
- python - SPARQL 查询返回的行数比预期的多
- azure - 在 Azure 中重置域控制器的密码
- amazon-web-services - 即使在 EC2 上增加卷和分区大小后,设备上也没有剩余空间
- supervisord - “通知发送”的命令在主管中不起作用
- file - C 一般 sscanf 返回