Javascript Verilerini Parse Etme
-
Ajax ile request atınca api üzerinden aşağıdaki gibi bir veri geliyor bizim sisteme.
Bu veri içinde dikkat ederseniz 7 tane value,value_raw verisi var. Bazı sayfalarda 3. ve 5. , bazı sayfalarda ise 4. ve 6. value_raw değerlerini kullanmam gerekiyor. Bu verileri alıp şu formata sokmam lazım:
{ { "datetime": "date Buraya", "3_value_raw": "3.value_raw_buraya", "5_value_raw": "5.value_raw_buraya" }, { "datetime": "date Buraya", "3_value_raw": "3.value_raw_buraya", "5_value_raw": "5.value_raw_buraya" }, }
Gelen veri örneği:
{ "prtg-version": "120.110.22.3", "treesize": 11520, "histdata": [{ "datetime": "6.6.2020 13:47:15 - 13:47:30", "datetime_raw": 43988.4496527778, "value": "6.371.541 KByte", "value_raw": 6524458086.6036, "value": "779.738 kbit/s", "value_raw": 97467255.5513, "value": "1.581.193 KByte", "value_raw": 1619141916.8621, "value": "193.504 kbit/s", "value_raw": 24187958.1246, "value": "4.790.348 KByte", "value_raw": 4905316169.7415, "value": "586.234 kbit/s", "value_raw": 73279297.4267, "value": "0 %", "value_raw": 0.0000, "coverage": "100 %", "coverage_raw": 10000 }, { "datetime": "6.6.2020 13:47:30 - 13:47:45", "datetime_raw": 43988.4498263889, "value": "1.320.059 KByte", "value_raw": 1351740014.2524, "value": "720.928 kbit/s", "value_raw": 90116000.9502, "value": "359.314 KByte", "value_raw": 367937412.6521, "value": "196.233 kbit/s", "value_raw": 24529160.8435, "value": "960.745 KByte", "value_raw": 983802601.6003, "value": "524.695 kbit/s", "value_raw": 65586840.1067, "value": "0 %", "value_raw": 0.0000, "coverage": "100 %", "coverage_raw": 10000 }] }
JS konusunda bilgisi olan arkadaşlar yardımcı olabilirse sevinirim.
coder2 tarafından 08/Haz/20 15:50 tarihinde düzenlenmiştir -
var sonucArray=[];
foreach ( line => gelenVeri["histdata"] ) {
var tempArray=[];
tempArray.push( "datetime" => line["datetime"] );
tempArray.push( "3. raw" => line[3] );
tempArray.push( "5.raw" => line[5] );
sonucArray.push ( tempArray );
}
psudo oldu ama böyle birşey olması lazım. Javascriptte array'leri hiç sevmiyorum :(
line[3] ve line[5] in indexlerini hangisi lazımsa ona göre düzenlemek gerek
NoktaliVirgul tarafından 08/Haz/20 15:56 tarihinde düzenlenmiştir -
Aşağıdaki gibi birşeyler yaptım, datetime verilerini alıyorum fakat index sırasını vererek elemanlara ulaşamadım. Sanırım key değerleri tekrar ettiği için hata oluşuyor veya sadece ilk key=>value leri alıyor.
exampleData = { "prtg-version": "120.110.22.3", "treesize": 11520, "histdata": [{ "datetime": "6.6.2020 13:47:15 - 13:47:30", "datetime_raw": 43988.4496527778, "value": "6.371.541 KByte", "value_raw": 6524458086.6036, "value": "779.738 kbit/s", "value_raw": 97467255.5513, "value": "1.581.193 KByte", "value_raw": 1619141916.8621, "value": "193.504 kbit/s", "value_raw": 24187958.1246, "value": "4.790.348 KByte", "value_raw": 4905316169.7415, "value": "586.234 kbit/s", "value_raw": 73279297.4267, "value": "0 %", "value_raw": 0.0000, "coverage": "100 %", "coverage_raw": 10000 }, { "datetime": "6.6.2020 13:47:30 - 13:47:45", "datetime_raw": 43988.4498263889, "value": "1.320.059 KByte", "value_raw": 1351740014.2524, "value": "720.928 kbit/s", "value_raw": 90116000.9502, "value": "359.314 KByte", "value_raw": 367937412.6521, "value": "196.233 kbit/s", "value_raw": 24529160.8435, "value": "960.745 KByte", "value_raw": 983802601.6003, "value": "524.695 kbit/s", "value_raw": 65586840.1067, "value": "0 %", "value_raw": 0.0000, "coverage": "100 %", "coverage_raw": 10000 }] }; var result = []; exampleData["histdata"].forEach(function(item){ var tempArray=[]; tempArray["datetime"] = item["datetime"]; tempArray["3_value"] = item[7]; tempArray["5_value"] = item[9]; result.push(tempArray); }); console.log(result);
-
Problem gelen JSON değerinde
Buraya gelen çıktıyı yapıştırabilirsin. JS eval tahmin edeceğin gibi gelen değerin direk JSON object olarak okunmuş hali.
Her key value'su benzersiz olmak zorundadır. Javascript betik dili JSON da bunun bir çeşit objecti olduğu için hata vermiyor fakat en son değer okunur. Bu gelen veriyi kim veriyorsa onda problem var.
İlla bir şeyler bulmak istiyorsan elbette bir şeyler yazılabilir fakat JSON kullanmış olmazsın
Çözüm önerisi için üşendim açıkcası ama yol göstermek açısında JSON olarak değil plain text olarak okuyup regex ile okuman bir çare olabilir. Yine de dediğim gibi çok saçma
Yine de boş geçmiş olmayım diye çözüm açısından "json multiple same keys" google aramasından güzel 3 link koydum (ilk 3 link ama olsun belki sen de yazmaya üşenmişsindir diye)
https://github.com/nlohmann/json/issues/612
https://dzone.com/articles/duplicate-keys-in-json-objects
https://stackoverflow.com/questions/5306741/do-json-keys-need-to-be-unique
-
Teşekkürler arkadaşlar, sonuç olarak sorunu şimdilik çözemedim :)
Regex veya server tarafında php ile birşeyler yaparak parse etme yoluna gideceğim.
-
Javascript icindeki objede birden fazla ayni key kullanilmis,direk native fonksiyonlar bunu parse etmez hocam. Regex isini gorur muhtemelen. Eger halledemezsen ozelden ulas bana.
-
Eğer histdata içerisi sabit geliyorsa;
var historyData = Object.values(OBJEADI.histdata);
historyData[2]; //ilk value
historyData[3]; //ilk value_rawsonrakileri almak için [] içindeki index değerini kullanırsın.