Servisten dönen data şöyle:
{
"USER":[
{
"AD":"AILEMLP002003120",
"SOYAD":3,
"YAS":3,
}
]
}
Amacım sadece user içerisindekileri bir değişkende tutmak. Sonra da ihtiyaca göre sadece adını veya yaşını çekmek.
fetch('abc.example.com)
.then((response) => response.json())
.then((responseJson) => {
//Şunu yazdırdığımda
console.log(responseJson.USER);
//bu dönüyor haliyle.
***
[{
"AD":"Ali",
"SOYAD":Velioglu,
"YAS":3,
}]
***
//İçinden adı çekmek istediğimde şunu yapıyorum bu da oluyor.
resonseJson.USER[0].AD; //Başka türlü de alınabiliyorsa aydınlatın.
***
Ali
***
}
Buraya kadar her şey istediğim gibi.
Ama ben responseJson.USER ı bir değişkene attığımda. Değişken ismi currentUser olsun.. fetch dışında console.log(currentUser) dediğimde "List [ Map { ... } ]" diye geliyor data ne alaka? Bu yüzden içinde gezemiyorum rahatlıkla.
JSON.parse(currentUser) denedim fakat parse edemiyor error veriyor.
JSON.stringfy dediğimde düzgün geldi fakat bu da string olduğu için her karakter dizinin bir elemanı gibi davranıyor yine içinde gezemiyorum. [0] dediğimde sadece "[" geliyor yani.
Çözümü şöyle buldum aslında ama mantığını anlamadım. Servisten responseJson ı önce stringfy edip state'teki bir değişkene atıyorum. Sonra kullanırken parse edip [0].AD diyorum o zaman geliyor.
E bu zaten JSON değil miydi neden direkt atadığım şekliyle olmadı?
fetch'in bir bok yemesi olabilir mi veya benim değişkenin tipini başta ne olarak belirlediğimle falan?
Senior bir arkadaş redux-saga kullanıyor. Saga içinde yield.call diye çekmiş ve gelen datayı yield.put diyerek atmış mesela bir değişkene. O değişken içindekileri okurken gayet user.sepet.no falan diye çağırıyor geliyor.
Hiç JSON a çevirme falan yapmamış ama direkt atmış. Onla ilgili olabilir mi?
Not: ReactNative spor
"Ama ben responseJson.USER ı bir değişkene attığımda..."
Bunu nasıl attığınız önemli. Tam kodu bilemediğim için tahmin yürütüyorum: fetch asenkron bir fonksiyon olduğundan atama işlemi gerçekleşmeden ulaşmaya çalışıyorsunuz, o da bir promise olduğundan sorun oluyor. Şunu deneyin:
var x;
await fetch('example.com')
.then(response => response.json())
.then(data => x = data);
console.log(typeof x); // object
Teşekkürler ancak async-await diyerek de kullansam işlemden önce çağırmıyorum. Dışarıda bir butonun onPress'inde çekiyorum değişkeni. Fetch işlemi bittiğinde yani. Bittiğini de işte progress bar koydum o kapanınca anlıyorum. Onunla ilgili olduğunu sanmıyorum, çünkü zaten stringfy olarak bir değişkene atınca düzgün geliyor USER. Fakat ben neden stringfy edip tutma gereği duyuyorum JSON ı direkt tutamıyor muyum
Buradaki USER aslında userları içeren bir list.
o yüzden sen bu listin içindeki elemanlara index ile ulaşabilirsin.
senin currentUSer değişkenin de bu yüzden liste içeren bir değişken.
Peki fetch içinde neden List gibi calismiyor? Orada index kullanmadan erisiyorum direkt farklı childlari yazarak
console.log('currentUser :', currentUser);
(object 2. parametre olarak verildiğinde içinde dolaşılabilir şekilde console'a basılır)
veya
console.dir(currentUser);
(object tree yapısı şeklinde console'a basılır)
bunları deneyebilirsiniz.
Orası öyle de ben sorunun tam anlaşılmadığını düşünüyorum.
fetch içinde kullanırken responseJson.USER[0].AD dediğimde Ali geliyor da..
fetch içinde this.setState({user: responseJson.USER}); diyerek bir değişkene atadıktan sonra
dışarıda bir fonksiyonda
this.state.user[0].AD dediğimde neden Ali gelmiyor bunu anlamaya çalışıyorum.