JSON示例
{
"tickets": [
{
"url": "https://domain.zendesk.com/api/v2/tickets/10001.json",
"id": 10001,
"custom_fields": [
{
"id": 360007982393,
"value": "Some Value"
},
{
"id": 360008063134,
"value": "Foo"
},
{
"id": 360007982273,
"value": "Bar"
},
{
"id": 360007982293,
"value": null
}
],
"satisfaction_rating": null
},
{
"url": "https://domain.zendesk.com/api/v2/tickets/10002.json",
"id": 10002,
"custom_fields": [
{
"id": 360007982393,
"value": "Another value"
},
{
"id": 360008063134,
"value": "Bar"
},
{
"id": 360007982273,
"value": "Foo"
},
{
"id": 360007982293,
"value": null
}
],
"satisfaction_rating": null
}
],
"count": 2,
"next_page": "https://domain.zendesk.com/api/v2/incremental/tickets.json?start_time=1541167467",
"end_time": 1541167467
}
示例Python
json = << Above JSON >>
tickets_json = json['tickets']
result = json_normalize(data=tickets_json, sep='_')
df=pd.DataFrame(result)
查询描述
因此,通过以上操作,我得到了一个数据框,显示为:
URL,ID,custom_fields,满意度等级
Custom_Fields是我需要努力的地方,
url,id,custom_fields_360007982393,custom_fields_360008063134,custom_fields_360007982273,custom_fields_360007982293,满意度_p
或与上述类似,因为有效地我需要从自定义值中的ID到主数据框中的列的一部分或成为其名称。
我试图将record_path与meta一起使用,但这会将数据帧转换为无法使用的格式,这对于我在这里想要实现的目的来说。我尝试拉出custom_fields,然后将其附加回去,但是我所能找到的只是将随机数作为列名,然后使用与每个行中的值相同的id,值对。
此数据将导入到MySQL中,并用于根据ID报告值。在大多数情况下,custom_fields的顺序相同,但是我不确定它们会永远保持这种状态。
JSON来自ZenDesk API(https://developer.zendesk.com/rest_api)
输出目标:
url, id, 360007982393, 360008063134, 360007982273, 360007982293, satisfaction_rating
"https:.." , 10001, "Some Value", "Foo", "Bar", null, null
"https:.." , 10002, "Another value", "Bar", "Foo", null, null
答案 0 :(得分:0)
如何为上述json格式编写自定义解析器函数呢?
在脚本下方,该脚本将一张票证转换为将与json_normalize
一起使用的“扁平” json:
def parseCustoms(input):
out = {'url': input['url'],
'id': input['id'],
'satisfaction_rating': input['satisfaction_rating']}
cust_fields = [(str(x['id']),x['value']) for x in input['custom_fields']]
for field in cust_fields:
out['cf_' + field[0]] = field[1]
return out
您将创建解析数组,如
parsed_tickets = [parseCustoms(ticket) for ticket in tickets_json]
现在,json_normalize
将表现出预期的效果
result = json_normalize(parsed_tickets)