【发布时间】:2013-04-16 14:53:54
【问题描述】:
我绝不是 Python 大师,但我知道自己的方式。然而,在过去的两个小时里,我一直在抨击以下内容:
我正在使用 json.loads() 函数解析来自 WCF Web 服务的 JSON 响应。结果是我在整个应用程序中使用的 Python 字典。但是,我现在需要混淆 id、reseller_id 等以便在 HTTP GET 请求中使用。
这是一个响应的一个示例:(注意,我有很多这样的响应,所以我正在寻找一个通用的解决方案。)我想要用 id 值的哈希替换任何 id 的值
{
"token":"String content",
"user":{
"distributor":{
"email":"String content",
"id":2147483647,
"name":"String content"
},
"email":"String content",
"first_name":"String content",
"id":2147483647,
"last_name":"String content",
"reseller":{
"email":"String content",
"id":2147483647,
"name":"String content",
"portal_css":"String content",
"portal_logo":"String content",
"portal_name":"String content",
"portal_url":"String content"
},
"role":2147483647
}
}
我尝试过各种策略,使用如下代码:
result = json.loads(json_result, object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))
和
def fun(d):
if 'id' in d:
yield d['id']
for k in d:
if isinstance(d[k], list):
for i in d[k]:
for j in fun(i):
yield j
我无法让它正常工作。所以:
问题 1: 我可以将 json 转换为(匿名)Python 对象吗?
问题 2: 我可以就地编辑结果字典吗?
问题 3: 当一切都失败了;有人知道如何实现这一目标吗?
非常感谢!
【问题讨论】:
-
json.loads(json_result)给你一本字典。 “匿名 Python 对象”是什么意思?你能举一个你想要的输出的例子吗? (我认为您想对 ID 进行哈希处理,但我没有看到任何尝试在您的代码示例中对任何内容进行哈希处理)。你想要什么样的散列? -
澄清一下,您提到的“HTTP GET 请求”是否需要传递整个字典,还是只传递散列 ID?
-
@Aya,只是散列的 id,例如 /reseller/28763298728/Reseller-A/users 而不是 /reseller/1/users
-
TBH,你也可以让dict保持原样,在需要的时候按需计算hash。
-
@Berdus JavaScript?你根本没有在问题中提到这一点。也许您在问题中包含了这一点。
标签: python json dictionary