解析json键值对



我有以下JSON从facebook:

{
"insights": {
"data": [
{
"name": "page_fans_city",
"period": "day",
"values": [
{
"value": {
"Lakki Marwat, Khyber Pakhtunkhwa, Pakistan": 704,
"Dera Ghazi Khan, Punjab, Pakistan": 725,
"Tank, Khyber Pakhtunkhwa, Pakistan": 750,
"Khwazakhela, Khyber Pakhtunkhwa, Pakistan": 792,
"Dammam, Saudi Arabia": 828,
"Chakdara Fort, Khyber Pakhtunkhwa, Pakistan": 936,
"Gujrat, Punjab, Pakistan": 975,
"Al Ain, United Arab Emirates": 1011,
"Wah, Punjab, Pakistan": 1082,
"Kabul, Afghanistan": 1108,
"Bahawalpur, Punjab, Pakistan": 1144,
"Sargodha, Punjab, Pakistan": 1148,
"Sialkot, Punjab, Pakistan": 1290,
"Parachinar, Federally Administered Tribal Areas, Pakistan": 1322,
"Chitral, Khyber Pakhtunkhwa, Pakistan": 1396,
"Hyderabad, Sindh, Pakistan": 1532,
"Swabi, Khyber Pakhtunkhwa, Pakistan": 1654,
"Hangu, Khyber Pakhtunkhwa, Pakistan": 1680,
"Karak, Khyber Pakhtunkhwa, Pakistan": 1784,
"Doha, Qatar": 1873,
"Charsadda, Khyber Pakhtunkhwa, Pakistan": 1936,
"Sharjah, United Arab Emirates": 2169,
"Gujranwala, Punjab, Pakistan": 2313,
"Nowshera, Khyber Pakhtunkhwa, Pakistan": 2350,
"Dir, Khyber Pakhtunkhwa, Pakistan": 2449,
"Jeddah, Saudi Arabia": 2739,
"Mansehra, Khyber Pakhtunkhwa, Pakistan": 3358,
"Multan, Punjab, Pakistan": 3383,
"Haripur, Khyber Pakhtunkhwa, Pakistan": 3735,
"Faisalabad, Punjab, Pakistan": 3815,
"Quetta, Balochistan, Pakistan": 3862,
"Abu Dhabi, United Arab Emirates": 4374,
"Mingora, Khyber Pakhtunkhwa, Pakistan": 5641,
"Dera Ismail Khan, Khyber Pakhtunkhwa, Pakistan": 6143,
"Bannu, Khyber Pakhtunkhwa, Pakistan": 6623,
"Kohat, Khyber Pakhtunkhwa, Pakistan": 6760,
"Abbottabad, Khyber Pakhtunkhwa, Pakistan": 7204,
"Dubai, United Arab Emirates": 7767,
"Rawalpindi, Punjab, Pakistan": 7869,
"Riyadh, Saudi Arabia": 8477,
"Mardan, Khyber Pakhtunkhwa, Pakistan": 16039,
"Lahore, Punjab, Pakistan": 16371,
"Islamabad, Islamabad Capital Territory, Pakistan": 18291,
"Karachi, Sindh, Pakistan": 22880,
"Peshawar, Khyber Pakhtunkhwa, Pakistan": 93904
},
"end_time": "2022-05-27T07:00:00+0000"
},
{
"value": {
"Lakki Marwat, Khyber Pakhtunkhwa, Pakistan": 703,
"Dera Ghazi Khan, Punjab, Pakistan": 727,
"Tank, Khyber Pakhtunkhwa, Pakistan": 754,
"Khwazakhela, Khyber Pakhtunkhwa, Pakistan": 790,
"Dammam, Saudi Arabia": 829,
"Chakdara Fort, Khyber Pakhtunkhwa, Pakistan": 939,
"Gujrat, Punjab, Pakistan": 978,
"Al Ain, United Arab Emirates": 1013,
"Wah, Punjab, Pakistan": 1086,
"Kabul, Afghanistan": 1113,
"Bahawalpur, Punjab, Pakistan": 1138,
"Sargodha, Punjab, Pakistan": 1145,
"Sialkot, Punjab, Pakistan": 1292,
"Parachinar, Federally Administered Tribal Areas, Pakistan": 1317,
"Chitral, Khyber Pakhtunkhwa, Pakistan": 1398,
"Hyderabad, Sindh, Pakistan": 1537,
"Swabi, Khyber Pakhtunkhwa, Pakistan": 1664,
"Hangu, Khyber Pakhtunkhwa, Pakistan": 1678,
"Karak, Khyber Pakhtunkhwa, Pakistan": 1787,
"Doha, Qatar": 1874,
"Charsadda, Khyber Pakhtunkhwa, Pakistan": 1941,
"Sharjah, United Arab Emirates": 2167,
"Gujranwala, Punjab, Pakistan": 2330,
"Nowshera, Khyber Pakhtunkhwa, Pakistan": 2372,
"Dir, Khyber Pakhtunkhwa, Pakistan": 2454,
"Jeddah, Saudi Arabia": 2732,
"Mansehra, Khyber Pakhtunkhwa, Pakistan": 3359,
"Multan, Punjab, Pakistan": 3380,
"Haripur, Khyber Pakhtunkhwa, Pakistan": 3737,
"Faisalabad, Punjab, Pakistan": 3825,
"Quetta, Balochistan, Pakistan": 3858,
"Abu Dhabi, United Arab Emirates": 4378,
"Mingora, Khyber Pakhtunkhwa, Pakistan": 5646,
"Dera Ismail Khan, Khyber Pakhtunkhwa, Pakistan": 6137,
"Bannu, Khyber Pakhtunkhwa, Pakistan": 6624,
"Kohat, Khyber Pakhtunkhwa, Pakistan": 6747,
"Abbottabad, Khyber Pakhtunkhwa, Pakistan": 7201,
"Rawalpindi, Punjab, Pakistan": 7523,
"Dubai, United Arab Emirates": 7763,
"Riyadh, Saudi Arabia": 8476,
"Mardan, Khyber Pakhtunkhwa, Pakistan": 16058,
"Lahore, Punjab, Pakistan": 16361,
"Islamabad, Islamabad Capital Territory, Pakistan": 18422,
"Karachi, Sindh, Pakistan": 22981,
"Peshawar, Khyber Pakhtunkhwa, Pakistan": 93840
},
"end_time": "2022-05-28T07:00:00+0000"
}
],
"title": "Lifetime Likes by City",
"description": "Lifetime: Aggregated Facebook location data, sorted by city (top 50), about the people who like your Page. (Unique Users)",
"id": ""
}
],
"paging": {
"previous": "",
"next": "?access_token="
}
},
"id": ""
}

可以看到,它由带有城市名称和值的键值对组成。我想要的是解析键值对,并通过api将它们插入数据库。城市名称将写入城市名称;列,并将值放入"value"列。

代码:

graph = facebook.GraphAPI(access_token=i)
profile = graph.get_object(id='me', fields='insights.metric(page_fans_city)')
x = json.dumps(profile, indent=4)
# print (x)

# pageID = profile['id']
# pageName = profile['name']
raw_data = json.loads(x) # parse the string into a python dictionary
useful_data = raw_data['insights']['data'] # Only picking concerned fields
output = {'totalCount' : []} # This is where we will store the results as tuples of (value, end_time)
secondOutput = {'newTuple': []}
d = []
for el in useful_data:
if el['period'] == "day":
for i in el['values']:
output['totalCount'].append( (i['value'], i['end_time']) )

print (output)

上面的代码存储了整个值,我想要的是单独的键值对,以便我可以使用它们。如有任何帮助,不胜感激。

在您的内部循环中,您可以对i['value']进行如下迭代:

for key, value in i['value'].items():
# do something with the data

有关更多信息,请参阅Python 3文档中Python教程的数据结构部分。

最新更新