2016-01-17 53 views
1

我想要取兩個由整數和字符串組成的JSON,並使用python 2.7將它們組合在一起。Python 2.7 - 取兩個JSON並將字符串字段值組合在一起並添加int字段

例如:

{"key": {"field_string": ["string"],"field_num": 1}} 
{"key": {"field_string": ["another_string"],"field_num": 2}} 

的什麼,我試圖做的要求是:

  • 關鍵的將是相同的,都需要在合併後保持不變
  • 整數需要加在一起,所以1 + 2 = 3,這些字符串需要以數組格式添加在一起(它們已經在上面的數組中)。
  • 每JSON領域的範圍,最JSON的將有4-7場

什麼,我想輸出的樣子,基於上述的例子之間:

{"key": {"field_string": ["string","another_string"],"field_num": 3}} 

另外,我使用的這個項目將在一臺無法訪問互聯網的機器上,所以如果可能的話,我需要使用標準的python庫。

任何援助與此將不勝感激。我發現的大多數示例都涉及將兩個JSON對象組合在一起,但是,整數不會被添加,這是我需要發生的關鍵部分。

UPDATE

多一點背景成這樣了,這是一個項目,我的工作,我不能進入很多細節的背後,不過,我可以給一個僞代碼示例。

我正在做的背後的基本思想是,我需要結合很多JSON。在這個例子中,我簡單地將它列爲兩個,但是在我的代碼的最終版本中,它將處理成千上萬的JSON(大數據項目)。它的JSON部分只是我嘗試完成的一小部分,但卻是關鍵部分。

這裏是的JSON的一個是如何構建一個例子-ISH:

{ 
    "key1": { 
    "blue_data": 12, 
    "green_data": 0, 
    "red_data": [], 
    "yellow_Data": [ 
     "string_1", 
     "string_2", 
     "string_3" 
    ], 
    "foo": "XX", 
    "bar": "YYY", 
    "foobar": "ZZZZ" 
    } 
} 

然而,一些領域可能會被省略,例如最近3場可能會或可能不會被收錄,或者它們的子集。

JSON對象傳遞給我的腳本的方式是以數組的形式。所以數組將持有一系列使用for循環迭代的JSON。

for key in list_of_keys: 
    for item in json_list: 
     json_dump_data = json.loads(item) 
     try: 
      json_blue_data[key] 
     except: 
      json_blue_data[key] = int(json_dump_data["blue_data"]) 
     else: 
      json_data_data[key] = json_blue_day[key] + int(json_dump_data["blue_data"]) 

我在做類似上述的東西每個值,我就基本上打破各個領域分解成一個字典對象,並在年底將它們結合起來。我知道這不是最有效的方法,但我是新手,並且使用預先存在的代碼。

+0

轉換JSON到Python對象(字典),你需要什麼,並轉換的Python對象(字典)爲JSON - 使用'JSON'標準模塊。 – furas

+0

請提供一個例子,說明'每個JSON的字段範圍,大多數JSON的將有4-7個字段的要求 – Fabricator

+1

SO不是代碼寫入服務。至少向我們展示了迄今爲止您一直在嘗試的內容。 –

回答

2

這是假定所有的鍵都具有相同的值類型。

它允許深度達到約1000(默認的Python最大堆棧深度)

import json 

obj1 = json.loads('{"key": {"field_string": ["string"],"field_num": 1}}') 
obj2 = json.loads('{"key": {"field_string": ["another_string"],"field_num": 2}}') 

def combine(obj1, obj2): 
    for k, v in obj1.items(): 
     if k in obj2: 
      if isinstance(v, dict): 
       combine(obj1[k], obj2[k]) 
      else: 
       # assume list or int based on problem description 
       obj1[k] = obj1[k] + obj2[k] 


combine(obj1, obj2) 
print json.dumps(obj1) 

輸出:

{"key": {"field_string": ["string", "another_string"], "field_num": 3}} 
+0

'list + list'也起作用,所以這可以被簡化,檢查字典並且遞歸其他'obj1 [k] + = obj2 [k]'。 – AChampion

+0

偉大的建議。添加。 –

+0

NP。 BTW'x + = y'比'x = x + y'更有效 - 對於列表來說,因爲前者會更新到'x'而不是創建第三個列表,然後將其分配給'x'。 – AChampion

1

將JSON轉換爲Python對象(字典),根據需要執行操作並將Python對象(字典)再次轉換爲JSON。使用JSON標準模塊。

import json 

# input JSON 
json1 = '{"key": {"field_string": ["string"],"field_num": 1}}' 
json2 = '{"key": {"field_string": ["another_string"],"field_num": 2}}' 

# convert JSON to Python dictionary 
dict1 = json.loads(json1) 
dict2 = json.loads(json2) 

# create dictionary for results 
dict3 = {'key': {}} 

# do what you need 
dict3['key']['field_string'] = dict1['key']['field_string'] + dict2['key']['field_string'] 
dict3['key']['field_num'] = dict1['key']['field_num'] + dict2['key']['field_num'] 

# convert result to JSON 
json3 = json.dumps(dict3) 

print(json3) 

# {"key": {"field_num": 3, "field_string": ["string", "another_string"]}} 
相關問題