Python'da, aynı verileri açıklayan JSON biçimlendirilmiş bir metin döndüren birçok web hizmetini arıyorum, ancak her biri farklı yapılandırılmış. Veriler arasında geçiş yapmak için bir düzine yol yazmak yerine, ortak bir temel yol ve ortak alan adı oluşturmaya çalışıyorum, ancak istenen alanı yakalayabilmek için dinamik bir isim oluşturmak için şimdi anlamıyorum. sokak adresini çağırırPython'da JSON'dan Değişkenleri Yakalamak için Dinamik Yol Oluşturma
servis1, "addr1" ise, "address1" diyorService2.
service1 Sokak adresine giden JSON yolu: ["results"] [0] ["locations"] [0] ["addr1"].
service2 Sokak adresine giden JSON yolu: ["query"] [0] ["address1"].
servis1 tepkisi: my ortak terimlerden
{
"results":[
{
"providedLocation":{
"location":"123 Main St. Whoville"
},
"locations":[
{
"addr1":"123 Main St.",
"city":"Whoville"
}
]
}
]
}
ben adres yerleri arasında döngü ediyorum
[service1]
base_path = '["results"][0]["locations"]'
field = "addr1"
[service2]
base_path = '["query"]'
field = 'address1'
dosya translation.ini böyle döndürdü:
j = json.loads(response.text)
try:
for i in range(0,count_the_results()):
street_number = j[base_path][i][field] # multiple locations returned
except KeyError:
print("street_number error again")
Eval() kullanmayı denedim, ancak parantezleri düşürdü ([0]) hangi
j[eval(base_path)]
Ben parçalar halinde base_path kırarak çalıştı ama eval hala bana
base_path = '["results"][0]'
locations = '["locations"]'
j[eval(str(base_path)+str(locations))]
Ben tuşlarını kullanın, ama yine de her nasılsa
özgün bir yol inşa etmek olabilir alır yolunu bozarj.get ("sonuç" {}) [0] .get ("yerleri") [i] [alan]
Yol oluştururken eksik olanı işaret edebilir misiniz, lütfen?
Her listenin ilk sonucunu her zaman kullanmanın bir nedeni var mı? Örneklerinizdeki her iki servis modeli de çeşitli adreslere sahip olmayı destekler; Hepsini ele alabilecek şekilde kodlamamalısın? – Joe
iyi soru, Joe. "Base_path", cevabın statik bir parçası olarak tanımladığım bölümdür - her zaman 1 öğe ve sadece "sonuç" (çoğul) olarak adlandırılır. Bunu, benim örneğimde, istenen alandan önce, [i] tarafından arttırılan, bilinmeyen bir liste sayısı takip eder. Cevabın için teşekkürler. – jim
her zaman belirli bir dizgeyse tuşlara baktığınız bir adım adım yöntemini uygulayabilirsiniz. bu şekilde sadece değişkenin ismine sahip olmanız gerekir. –