[]

Javascript sorusu - JSON içerir

Daha açık olsun diye basitleştireceğim.

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
  • plutongezegendegilmi  (28.01.21 00:44:18) 
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


  • ananiyimioguz  (28.01.21 00:57:43 ~ 01:05:35) 
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.
  • €xpolerer  (28.01.21 09:23:35) 
Peki fetch içinde neden List gibi calismiyor? Orada index kullanmadan erisiyorum direkt farklı childlari yazarak


  • ananiyimioguz  (28.01.21 10:16:09 ~ 10:16:32) 
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.
  • faithless  (28.01.21 21:25:58) 
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.
  • ananiyimioguz  (29.01.21 09:51:24 ~ 09:52:28) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.