2017-05-31 172 views
1

我有以下結構的JSON:循環通過多維JSON(Python)的

{ 
    'count': 93, 
    'apps' : [ 
     { 
     'last_modified_at': '2016-10-21T12:20:26Z', 
     'frequency_caps': [], 
     'ios': { 
      'enabled': True, 
      'push_enabled': False, 
      'app_store_id': 'bbb', 
      'connection_type': 'certificate', 
      'sdk_api_secret': '--' 
     }, 
     'organization_id': '--', 
     'name': '---', 
     'app_id': 27, 
     'control_group_percentage': 0, 
     'created_by': { 
      'user_id': 'abc', 
      'user_name': 'def' 
     }, 
     'created_at': '2016-09-28T11:41:24Z', 
     'web': {} 
    }, { 
     'last_modified_at': '2016-10-12T08:58:57Z', 
     'frequency_caps': [], 
     'ios': { 
      'enabled': True, 
      'push_enabled': True, 
      'app_store_id': '386304604', 
      'connection_type': 'certificate', 
      'sdk_api_secret': '---', 
      'push_expiry': '2018-01-14T08:24:09Z' 
     }, 
     'organization_id': '---', 
     'name': '---', 
     'app_id': 87, 
     'control_group_percentage': 0, 
     'created_by': { 
      'user_id': '----', 
      'user_name': '---' 
     }, 
     'created_at': '2016-10-12T08:58:57Z', 
     'web': {} 
    } 
    ] 
} 

這兩個鍵 - 值對的JSON。第二對的值是更多JSON的列表。 對我來說,太多的信息,我想有這樣的JSON:

{ 
    'apps' : [ 
     { 
     'name': 'Appname', 
     'app_id' : 1234, 
     'organization_id' : 'Blablabla' 
     }, 
     { 
     'name': 'Appname2', 
     'app_id' : 5678, 
     'organization_id' : 'Some other Organization' 
     } 
    ] 
} 

我希望有一個JSON只包含一個鍵(「應用程序」)和它的價值,這將是一個列表更多的JSON只有三個鍵值對。 我很感激任何建議。

謝謝你的幫助!

+3

這應該是很容易實現的,你有沒有嘗試過這麼遠嗎? – errata

+0

對不起,我絕對是新的StackOverflow ... 是的,我試過一個for-loop工作,但它感覺不對.. –

回答

0

@ bishakh-戈什我不認爲你需要使用輸入JSON作爲字符串。它可以直接用作字典。 (從而避免ast

一個更簡潔的方式:

# your original json 
input_ = { 'count': 93, ... } 

而且這裏的步驟:

定義要保持

slice_keys = ['name', 'app_id', 'organization_id'] 

定義新的字典了什麼鍵slice_keys上的切片

dict(apps=[{key:value for key,value in d.items() if key in slice_keys} for d in input_['apps']]) 

就是這樣。

這應該產生格式化成你想要的JSON,e.g

{ 
'apps': 
    [ 
    {'app_id': 27, 'name': '---', 'organization_id': '--'}, 
    {'app_id': 87, 'name': '---', 'organization_id': '---'} 
    ] 
} 
+0

感謝您的意見!其實這正是我需要的!謝謝 ! :-) –

+0

偉大:)隨時解決問題,然後! – Arnaud

+0

好的,明白! :) –

0

這可能是你在找什麼:

import ast 
import json 
json_str = """{ 
    'count': 93, 
    'apps' : [ 
     { 
     'last_modified_at': '2016-10-21T12:20:26Z', 
     'frequency_caps': [], 
     'ios': { 
      'enabled': True, 
      'push_enabled': False, 
      'app_store_id': 'bbb', 
      'connection_type': 'certificate', 
      'sdk_api_secret': '--' 
     }, 
     'organization_id': '--', 
     'name': '---', 
     'app_id': 27, 
     'control_group_percentage': 0, 
     'created_by': { 
      'user_id': 'abc', 
      'user_name': 'def' 
     }, 
     'created_at': '2016-09-28T11:41:24Z', 
     'web': {} 
    }, { 
     'last_modified_at': '2016-10-12T08:58:57Z', 
     'frequency_caps': [], 
     'ios': { 
      'enabled': True, 
      'push_enabled': True, 
      'app_store_id': '386304604', 
      'connection_type': 'certificate', 
      'sdk_api_secret': '---', 
      'push_expiry': '2018-01-14T08:24:09Z' 
     }, 
     'organization_id': '---', 
     'name': '---', 
     'app_id': 87, 
     'control_group_percentage': 0, 
     'created_by': { 
      'user_id': '----', 
      'user_name': '---' 
     }, 
     'created_at': '2016-10-12T08:58:57Z', 
     'web': {} 
    } 
    ] 
}""" 

json_dict = ast.literal_eval(json_str) 

new_dict = {} 
app_list = [] 

for appdata in json_dict['apps']: 
    appdata_dict = {} 
    appdata_dict['name'] = appdata['name'] 
    appdata_dict['app_id'] = appdata['app_id'] 
    appdata_dict['organization_id'] = appdata['organization_id'] 
    app_list.append(appdata_dict) 

new_dict['apps'] = app_list 

new_json_str = json.dumps(new_dict) 

print(new_json_str) # This is your resulting json string