2017-06-18 82 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中编写它,但它们都会以非常简单的方式完成上述工作。