Bir React uygulamasına veri sunmak için bir Go sunucusu kullanan bir web uygulaması oluşturuyorum.
Sunucumun yapımında, Go docs tarafından sağlanan öğreticiyi takip ettim (https://golang.org/doc/tutorial/web-service-gin). Kodum bu koda çok benziyor ve curl kullandığımda beklenen sonuçları alıyorum.
[
{
"id":0,
"date":"2021-11-21T12:00:00Z",
"rentedTo":"Bob",
"rentedBy":"Jim"
},
//etc...
Ancak React'in getirme API'sini kullandığımda sonuçlarım beklenmedik bir biçimde geri geliyor.
fetch('http://localhost:8080/rentals')
.then((response)=> {
if (response.ok) {
return response.json();
}
throw response;
.then((jsonArr) => {
handleRentalsData(jsonArr)
})
.catch((error) => {
console.error("Error fetching data: ", error);
});
ne zaman ben... console.log(jsonArr)
, tarayıcı aşağıdakileri bildirir:
Array(3) [ {...},{...},{...} ]
//Expanding this object via the console shows the following information:
---> 0: Object { id: 0, date: "2021-11-21T12:00:00Z", rentedTo: "Bob", ... }
---> 1: Object { id: 1, date: "2021-11-22T12:00:00Z", rentedTo: "Bob", ... }
---> 2: Object { id: 2, date: "2021-11-23T12:00:00Z", rentedTo: "Bob", ... }
Bu indeksler (ve tarayıcının etiketi) verilerin artık bir Dizi şeklinde olduğunu gösteriyordu, ben de öyle davrandım.
İçindeki json dizelerini ayrıştırmak için bu dizide döngü yapmaya çalıştım, ancak JSON.parse(data)
beklediğim gibi nesneler üretmek yerine yalnızca sayılar (sırasıyla 0, 1 ve 2) üretir.
for (const json in jsonArr){
console.log(typeof json); //string
const rentalObj = JSON.parse(json);
console.log(typeof rentalObj); //number
console.log(rentalObj); //0, 1, and 2 respectively
console.log(rentalObj.date); //undefined, because rentalObj is now a number.
}
Biraz arama yaptım ve verilerin geldiği dizinin dizinlerinin bir soruna neden olabileceğini duydum, bu yüzden de bir reviver işleviyle ayrıştırmaya çalıştım.
for (const json in jsonArr){
console.log(typeof json); //string
const rentalObj = JSON.parse(json, (key, value) => {
console.log(key); //<empty string>
console.log(value); //0, 1, and 2
return(value);
});
console.log(typeof rentalObj); //number
console.log(rentalObj); //0, 1, and 2 respectively
console.log(rentalObj.date); //undefined
}
Çalışan JSON.parse(jsonArr)
beklendiği gibi bir hata atar. Kafam allak bullak oldu. Neden bir (n dizin) numarasına ayrıştırılıyor? Dizinin içindeki dizeleri ayrıştırırken (veya yazdırırken) yalnızca sayı üretirken Dizinin içindeki Nesneleri nasıl ayıklayabilirim?