Python では、現在、いくつかの深い辞書と配列を含む非常に大きな JSON ファイルを扱っています。一定ではないという問題があります。以下の例では、基本的には国であり、地域/州、都市、および郊外があります。問題は、郊外が 1 つしかない場合は辞書を返しますが、複数ある場合は辞書を含む配列であるため、別のコード行を追加してさらに深くする必要があります。確かに、ifelse はできますが、これは矛盾のごく一部にすぎず、常に ifelse を実行するのは適切ではありません。
私がやりたいことは、ベルギー国内で辞書エントリを検索"code": "8400"
し、JSON ファイル内の場所を返すことです。このようなことをするための私の最善のアプローチは何でしょうか? ありがとう!
***SNIP***
{
"code": "BE",
"name": "Belgium",
"regions": {
"region": [
{
"code": "45",
"name": "Flanders",
"places": {
"place": [
{
"code": "1790",
"name": "Affligem"
},
{
"code": "8570",
"name": "Anzegem"
},
{
"code": "8630",
"name": "Diksmuide"
},
{
"code": "9600",
"name": "Ronse"
}
]
},
"subregions": {
"subregion": [
{
"code": "46",
"name": "Coast",
"places": {
"place": [
{
"code": "8300",
"name": "Knokke-Heist"
},
{
"code": "8400",
"name": "Oostende",
"subplaces": {
"subplace": {
"code": "8450",
"name": "Bredene"
}
}
},
{
"code": "8420",
"name": "De Haan"
},
{
"code": "8430",
"name": "Middelkerke"
},
{
"code": "8434",
"name": "Westende-Bad"
},
{
"code": "8490",
"name": "Jabbeke"
},
{
"code": "8660",
"name": "De Panne"
},
{
"code": "8670",
"name": "Oostduinkerke"
}
]
}
},
{
"code": "47",
"name": "Cities",
"places": {
"place": [
{
"code": "1000",
"name": "Brussels"
},
{
"code": "2000",
"name": "Antwerp"
},
{
"code": "8000",
"name": "Bruges"
},
{
"code": "8340",
"name": "Damme"
},
{
"code": "9000",
"name": "Gent"
}
]
}
},
{
"code": "48",
"name": "Interior",
"places": {
"place": [
{
"code": "2260",
"name": "Westerlo"
},
{
"code": "2400",
"name": "Mol"
},
{
"code": "2590",
"name": "Berlaar"
},
{
"code": "8500",
"name": "Kortrijk",
"subplaces": {
"subplace": {
"code": "8940",
"name": "Wervik"
}
}
},
{
"code": "8610",
"name": "Handzame"
},
{
"code": "8755",
"name": "Ruiselede"
},
{
"code": "8900",
"name": "Ieper"
},
{
"code": "8970",
"name": "Poperinge"
}
]
}
},
編集:
現在、この JSON ファイルをどのように処理しているかを示すよう求められました。ルートは、検索しようとしている都市/郊外に等しい数字を含む辞書です。事前に都市か郊外かを定義するものではありません。以下は、この JSON ファイルを掘り下げる方法を学ぼうとしていたときに、遅延コード化された検索です。 をちょきちょきと切る
for k in dataDict['countries']['country']:
if k['code'] == root['country']:
for y in k['regions']['region']['places']['place']:
if y['code'] == root['place']:
city = y['name']
else:
try:
for p in y['subplaces']['subplace']:
if p['code'] == root['place']:
city = p['name']
except:
pass