我需要来自JSON中字典内的Dictionary的特定数据

时间:2017-05-31 23:14:18

标签: python api

我希望仅从此JSON API响应中提取catergory ID。

我目前有以下代码,其中dictstr是返回的JSON

print(dictstr['Store']['CustomCategories']['CustomCategory'][0:-1])

这打印出以下JSON:

{  
    'CategoryID':'20004239012',
    'Name':'Home Decor',
    'Order':'1',
    'ChildCategory':{  
        'CategoryID':'20215926012',
        'Name':'Furniture',
        'Order':'1'
    }
},
{  
    'CategoryID':'20004240012',
    'Name':'Christmas Decorations',
    'Order':'2'
},

我需要的输出只有CatergoryIDName键/值,如下所示:

['1', 'Other', '20004239012', 'Home Decor', '20215926012', 'Furniture', 
'20004240012', 'Christmas Decorations', '20270732012', 'Candle stands', 
'20270902012', 'Fireplace tools']

1 个答案:

答案 0 :(得分:1)

假设你只需要深入一级,你可以这样做:

代码:

cids = [x for x in sum(
    [(d.get('CategoryID'), d.get('ChildCategory', {}).get('CategoryID'))
     for d in data], ()) if x]

如何?

通过迭代列表,您可以提取字段的元组(d.get(...)),然后使用sum()组合元组,最后删除任何None(缺少)元素

测试代码:

data = [{
    'CategoryID': '20004239012',
    'Name': 'Home Decor',
    'Order': '1',
    'ChildCategory': {
        'CategoryID': '20215926012',
        'Name': 'Furniture',
        'Order': '1'
    }
},
{
    'CategoryID': '20004240012',
    'Name': 'Christmas Decorations',
    'Order': '2'
},
]

cids = [x for x in sum(
    [(d.get('CategoryID'), d.get('ChildCategory', {}).get('CategoryID'))
     for d in data], ()) if x]

print(cids)

结果:

['20004239012', '20215926012', '20004240012']