Foursquare에서 JSON 응답을 구문 분석하려고합니다. 내가 알 수없는 방식으로 중첩되어 있습니다. Here's a copy of the entire JSON.Foursquare API에서 중첩 JSON 구문을
다음은 JSON의의 조각입니다 :
{
"meta": {
"code": 200,
"requestId": "58cab8bc4434b959e2f68a69"
},
"response": {
"categories": [
{
"categories": [
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_",
"suffix": ".png"
},
"id": "56aa371be4b08b9a8d5734db",
"name": "Amphitheater",
"pluralName": "Amphitheaters",
"shortName": "Amphitheater"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/aquarium_",
"suffix": ".png"
},
"id": "4fceea171983d5d06c3e9823",
"name": "Aquarium",
"pluralName": "Aquariums",
"shortName": "Aquarium"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/arcade_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d1e1931735",
"name": "Arcade",
"pluralName": "Arcades",
"shortName": "Arcade"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/artgallery_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d1e2931735",
"name": "Art Gallery",
"pluralName": "Art Galleries",
"shortName": "Art Gallery"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/bowling_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d1e4931735",
"name": "Bowling Alley",
"pluralName": "Bowling Alleys",
"shortName": "Bowling Alley"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/casino_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d17c941735",
"name": "Casino",
"pluralName": "Casinos",
"shortName": "Casino"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_",
"suffix": ".png"
},
"id": "52e81612bcbc57f1066b79e7",
"name": "Circus",
"pluralName": "Circuses",
"shortName": "Circus"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/comedyclub_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d18e941735",
"name": "Comedy Club",
"pluralName": "Comedy Clubs",
"shortName": "Comedy Club"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/musicvenue_",
"suffix": ".png"
},
"id": "5032792091d4c4b30a586d5c",
"name": "Concert Hall",
"pluralName": "Concert Halls",
"shortName": "Concert Hall"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/performingarts_dancestudio_",
"suffix": ".png"
},
"id": "52e81612bcbc57f1066b79ef",
"name": "Country Dance Club",
"pluralName": "Country Dance Clubs",
"shortName": "Country Dance Club"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_",
"suffix": ".png"
},
"id": "52e81612bcbc57f1066b79e8",
"name": "Disc Golf",
"pluralName": "Disc Golf Courses",
"shortName": "Disc Golf"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_",
"suffix": ".png"
},
"id": "56aa371be4b08b9a8d573532",
"name": "Exhibit",
"pluralName": "Exhibits",
"shortName": "Exhibit"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d1f1931735",
"name": "General Entertainment",
"pluralName": "General Entertainment",
"shortName": "Entertainment"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/racetrack_",
"suffix": ".png"
},
"id": "52e81612bcbc57f1066b79ea",
"name": "Go Kart Track",
"pluralName": "Go Kart Tracks",
"shortName": "Go Kart"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/historicsite_",
"suffix": ".png"
},
"id": "4deefb944765f83613cdba6e",
"name": "Historic Site",
"pluralName": "Historic Sites",
"shortName": "Historic Site"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/karaoke_",
"suffix": ".png"
},
"id": "5744ccdfe4b0c0459246b4bb",
"name": "Karaoke Box",
"pluralName": "Karaoke Boxes",
"shortName": "Karaoke"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_",
"suffix": ".png"
},
"id": "52e81612bcbc57f1066b79e6",
"name": "Laser Tag",
"pluralName": "Laser Tag Places",
"shortName": "Laser Tag"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/historicsite_",
"suffix": ".png"
},
"id": "5642206c498e4bfca532186c",
"name": "Memorial Site",
"pluralName": "Memorial Sites",
"shortName": "Memorial Site"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/parks_outdoors/golfcourse_",
"suffix": ".png"
},
"id": "52e81612bcbc57f1066b79eb",
"name": "Mini Golf",
"pluralName": "Mini Golf Courses",
"shortName": "Mini Golf"
},
{
"categories": [
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/movietheater_",
"suffix": ".png"
},
"id": "56aa371be4b08b9a8d5734de",
"name": "Drive-in Theater",
"pluralName": "Drive-in Theaters",
"shortName": "Drive-in Theater"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/movietheater_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d17e941735",
"name": "Indie Movie Theater",
"pluralName": "Indie Movie Theaters",
"shortName": "Indie Movies"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/movietheater_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d180941735",
"name": "Multiplex",
"pluralName": "Multiplexes",
"shortName": "Cineplex"
}
],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/movietheater_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d17f941735",
"name": "Movie Theater",
"pluralName": "Movie Theaters",
"shortName": "Movie Theater"
},
{
"categories": [
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/museum_art_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d18f941735",
"name": "Art Museum",
"pluralName": "Art Museums",
"shortName": "Art Museum"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/nightlife/stripclub_",
"suffix": ".png"
},
"id": "559acbe0498e472f1a53fa23",
"name": "Erotic Museum",
"pluralName": "Erotic Museums",
"shortName": "Erotic Museum"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/museum_history_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d190941735",
"name": "History Museum",
"pluralName": "History Museums",
"shortName": "History Museum"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/museum_planetarium_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d192941735",
"name": "Planetarium",
"pluralName": "Planetariums",
"shortName": "Planetarium"
},
{
"categories": [],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/museum_science_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d191941735",
"name": "Science Museum",
"pluralName": "Science Museums",
"shortName": "Science Museum"
}
],
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/museum_",
"suffix": ".png"
},
"id": "4bf58dd8d48988d181941735",
"name": "Museum",
"pluralName": "Museums",
"shortName": "Museum"
},
"icon": {
"prefix": "https://ss3.4sqi.net/img/categories_v2/arts_entertainment/default_",
"suffix": ".png"
},
"id": "4d4b7104d754a06370d81259",
"name": "Arts & Entertainment",
"pluralName": "Arts & Entertainment",
"shortName": "Arts & Entertainment"
},
내 코드는 항상 하위 범주의 아래에 나열된 첫 번째 계층을 가져옵니다.
import urllib.request
import json
import sqlite3
from key import ID, SECRET
CLIENT_ID = ID
CLIENT_SECRET = SECRET
v = '20170315'
url = 'https://api.foursquare.com/v2/venues/categories?client_id='+ CLIENT_ID +'&client_secret=' + SECRET + '&v=' + v
contents = urllib.request.urlopen(url).read()
parsed = json.loads(contents)
clean = parsed['response']['categories']
my_list = [i['name'] for i in clean]
print(my_list)
출력 : 나는 문제가 하위 범주를 얻기 위해 구문 분석하는 데 문제가
['Arts & Entertainment', 'College & University', 'Event', 'Food', 'Nightlife Spot', 'Outdoors & Recreation', 'Professional & Other Places', 'Residence', 'Shop & Service', 'Travel & Transport']
. 모든 카테고리, 하위에 대해 id
및 name
을 가져 오려고합니다. 자신을 재귀 적으로 호출하고 함께 result
을 업데이트,이 id: name
키/값 쌍의 사전을 반환
def get_categories(data):
result = {}
for cat in data:
result[cat['id']] = cat['name']
if cat['categories']:
result.update(get_categories(cat['categories']))
return result
: 데이터 구조가 반복적으로 중첩되어있는 경우
당신을 감사합니다! 매력처럼 작동하고 재귀 함수에 대해 더 자세히 살펴볼 것입니다. – Bernardo