2017-06-18 98 views
1

我有一個嵌套的JSON,我需要從它"Max" & "Remaining"百分比值。如何從嵌套的JSON中獲取平坦的JSON?

這是樣品公式我想100-(Remaining/Max)*100=(Value)

樣品JSON的:

{ 
    "ConcurrentAsyncGetReportInstances": 
     { 
     "Max": 5, 
     "Remaining": 3 
    }, 
    "DailyApiRequests": 
     { 

     "Max":15000,"Remaining":14108 
     } 
} 

這是JSON輸出。

我需要的百分比值添加到關鍵

輸出示例:

{ 
    "ConcurrentAsyncGetReportInstances":40,(%value) 100-(5/3)*100 
    "DailyApiRequests": 5.95(%value) 100-(14108/15000)*100 

} 

解決方法:

  • 試圖這樣做使它成爲一個平的JSON和工作,但沒有幫我
  • 他的工作是轉換成JSON CSV和嘗試了一些,但它是很難

有人可以建議最好這樣做嗎?如果可能的話提供一些例子一些幫助也將不勝感激。

注:我使用Python 2.7

+0

輸入JSON中有很多''Max''&'「Remaining」百分比值。你在說什麼? – martineau

+0

感謝您要求所有**「最大」**和**「剩餘」**值我需要百分比值 –

+0

好吧,它們與您想要的輸出有什麼關係? – martineau

回答

0

首先收到您的JSON並將其轉換成字典

import json 
input_dict = json.loads(<your received son string>) 

input_dict = { 
    "ConcurrentAsyncGetReportInstances": 
     { 
     "Max": 200,"Remaining":200 
     }, 
    "DailyApiRequests": 
     { 
     "Max": 15000, "Remaining": 14108, 
     "Ant Migration Tool": {"Max": 0, "Remaining": 0}, 
     "Chatter Desktop": {"Max": 0, "Remaining": 0}, 
     "Chatter Mobile for BlackBerry": 
     {"Max": 0, "Remaining": 0}, 
     "Chemical Equipment And Processing": 
     {"Max": 0,"Remaining": 0} 
     } 
    } 

def flattenjson(input_dict, odict): 
    for ky in input_dict.keys(): 
     if isinstance(input_dict[ky], dict): 
      if set(['Max', 'Remaining']).issubset(input_dict[ky].keys()): 
       if input_dict[ky]["Max"] != 0: 
        odict[ky] = 100-(float(input_dict[ky]["Remaining"])/input_dict[ky]["Max"])*100 
       else: 
        odict[ky] = 0 
      for iky in input_dict[ky].keys(): 
       if isinstance(input_dict[ky][iky], dict): 
        tmp = {iky : input_dict[ky][iky]} 
        odict = flattenjson(tmp, odict) 
    return odict 

odict = flattenjson(input_dict, dict()) 
print json.dumps(odict) 
:然後輸入字典像下面通過遞歸調用工作

flattenjson幫助您遞歸調用上獲取所有最大所需輸出和你並不需要拼合的數據結構其餘條目

+0

嗨,感謝它的代碼片段,它運行良好,但我在讀取輸出的嵌套深度json時遇到了一些問題無法讀取內部鍵我附加了輸入文件的鏈接** https://docs.google.com/document/d/1Y9GEv7rthm7tL6-ejgKYyLAsX_A8hzVwn4zYLRD0xLg/edit**Please建議我在給定的片段 –

+0

@SrihariNadendla的變化我能夠很好地解析它並輸出 –

0

您可以使用JSON庫,像這樣檢索嵌套值:

import json 
sample_json = '{"ConcurrentAsyncGetReportInstances":{"Max": 5,"Remaining": 3},"DailyApiRequests": {"Max":15000,"Remaining":14108}}' 

jason = json.loads(sample_json) 
cagri_max = jason['ConcurrentAsyncGetReportInstances']['Max'] 
cagri_rem = jason['ConcurrentAsyncGetReportInstances']['Remaining'] 
0

。只是引用它的一部分,你想,這樣,例如,我認爲以下基本上你想要做什麼:

import json 

json_data = { 
       "ConcurrentAsyncGetReportInstances": { 
        "Max": 5, 
        "Remaining": 3 
       }, 
       "DailyApiRequests": { 
        "Max": 15000, 
        "Remaining": 14108 
       } 
      } 

def percentage_values(remaining, maximum): 
    return 100 - (float(remaining)/float(maximum)) * 100 

# build output dictionary 
json_out = {} 
for key in json_data: 
    value = percentage_values(json_data[key]["Remaining"], json_data[key]["Max"]) 
    json_out.update([(key, value)]) 

print(json.dumps(json_out, indent=4)) 

呈現出json_out內容的輸出結果是:

{ 
    "ConcurrentAsyncGetReportInstances": 40.0, 
    "DailyApiRequests": 5.9466666666666725 
} 

有更簡潔的方式來在Python中編寫它,但它們都會以非常簡單的方式完成上述工作。