2017-07-18 55 views
2

我有一個看起來像這樣的JSON列表:如何把JSON值到一個列表的Python

{ 
    "callback": [{ 
      "id": "R_puFk4fZ8m1lE4bD", 
      "set": "Default Response Set", 
      "ace": "asdf", 
      "date": "asdfdsa", 
      "1": "asdf", 
      "2": "s", 
      "3": "3", 
      "4": "1", 
      "zone": "0", 
      "long": "33.564498901367", 
      "lat": "-112.00869750977" 
     } 
    ] 
} 

我的實際數據有很大的列表中JSON對象,我想知道我怎麼會放json中單獨列表中的「日期」和「區域」之間的數字。這些數字在json對象之間有所不同,但它們總是處於「日期」和「區域」值之間。

我會做什麼把它改造成這樣:

{ 
    "callback": [{ 
      "id": "R_puFk4fZ8m1lE4bD", 
      "set": "Default Response Set", 
      "ace": "asdf", 
      "date": "asdfdsa", 
      "Q": [ 
       "1": "asdf", 
       "2": "s", 
       "3": "3", 
       "4": "1" 
      ], 
      "zone": "0", 
      "long": "33.564498901367", 
      "lat": "-112.00869750977" 
     } 
    ] 
} 
+6

注:沒有什麼是「總是在'date'和'zone'之間」,因爲這相當於一個Python字典,並且不保證排序。它們是唯一的數字鍵(表示爲字符串)嗎? – roganjosh

+0

@roganjosh哦,好的,謝謝。它們是以字符串表示的鍵,但不是所有的回調都是字符串的數字表示,有些只是字符串。 –

+1

好的......也許你可以走另一條路。除了那些你想要捕捉的密鑰,你想要捕獲的密鑰列表總是一樣嗎? – roganjosh

回答

2

您可以通過組成員整理出來(如PM 2Ring提到,集員更快O(1)):

def group_questions(source_dct): 
    meta_tags = {"id", "set", "ace", "date", "zone", "long", "lat"} 

    result_dct = {"Q": {}} 
    for key in source_dct: 
     if key not in meta_tags: 
      result_dct["Q"][key] = source_dct[key] 
     else: 
      result_dct[key] = source_dct[key] 
    return result_dct 

結果(注字典是沒有順序):

>>> print group_questions(dct) 
{'set': 'Default Response Set', 
'ace': 'asdf', 
'zone': '0', 
'long': '33.564498901367', 
'Q': {'1': 'asdf', 
     '3': '3', 
     '2': 's', 
     '4': '1'}, 
'lat': '-112.00869750977', 
'date': 'asdfdsa', 
'id': 'R_puFk4fZ8m1lE4bD'} 
1

使用內置int()功能檢查整數鍵:

new_list = [] 
for old_data in old_list: #old_list is the value of 'callback' key 
    data = {'Q': {}} 
    for key in old_data.keys(): 
     try: 
      num = int(key) 
      data['Q'][key] = old_data[key] 
     except ValueError: # stringy keys 
      data[key] = old_data[key] 
    new_list.append(data) 

現在,使用的東西打印new_listjson.dumps()會給出類似的東西:

[ 
    { 
     "Q": { 
      "1": "asdf", 
      "2": "s", 
      "3": "3", 
      "4": "1" 
     }, 
     "id": "R_puFk4fZ8m1lE4bD", 
     "set": "Default Response Set", 
     "ace": "asdf", 
     "date": "asdfdsa", 
     "zone": "0", 
     "long": "33.564498901367", 
     "lat": "-112.00869750977" 
    } 
] 
+0

這裏假設'Q'應該包含所有鍵爲int的元素。這可能會或可能不會滿足OP。 – TemporalWolf

+0

@TemporalWolf不,它不會那樣做。 'Q'有字符串鍵。看我的輸出。 –

+0

謝謝你的迴應,但是TemporalWolf說我並不需要捕獲的所有密鑰都是整數。 –

相關問題