v2.5.2
Giriş yap

Php ile Json olarak gelen metin biçimindeki sayılar hakkında?

trsherlock
514 defa görüntülendi

Merhabalar php cURL yardımı ile Gib üzerinde yaptığım bir sorgulamada aldığım verilerde json olarak dönen sayılar metin olarak saklandığı için tablolama olarak kullandığım kendoGrid'in excel fonksiyonu bu dataları metin olarak dikkate alıp Excel'e gönderiyor. Veri tabanımda yaptığım sorgulamalarda ise sayılar metin olarak gelmediği için Excel'e aktarıldığında sayı olarak algılanıyor.
Bu metin olarak gelen sayıları nasıl sayı olarak çekebilirim? Php tarafında bu işlemi yaptırmak istiyorum.

{
    "toplam":"109.51",
    "tarih":"2021-05-03",
    "paraBirimi":"TRY",
    "tesisatNo":"",
    "zaman":"18:54:38",
    "odenecek":"118.27",
    "vergi":"8.76",
    "gonderimSekli":"KAGIT"
}

Eğer değerleri aşağıdaki gibi alabilirsem sorunum çözülecek.

{
    "toplam":109.51,
    "tarih":"2021-05-03",
    "paraBirimi":"TRY",
    "tesisatNo":"",
    "zaman":"18:54:38",
    "odenecek":118.27,
    "vergi":8.76,
    "gonderimSekli":"KAGIT"
}

NOT: Gelen veri json olarak gelmekte ben json_decode($tokenDispatch, true)["data"]["FATURASONUC"] yapıp içindeki değerlere ulaşıyorum sonra tekrar encode kendoGrid ile okutuyorum.

Cevap yaz
Cevaplar (2)
tayfunerbilen
1041 gün önce

is_numeric() ile değeri kontrol edip eğer true dönüyorsa geriye (float) olarak döndürebilirsin. Örnek bir fonksiyon;

function convertData($data) {
    return array_map(function($value) {
        if (is_numeric($value)) return (float) $value;
        return $value;
    }, $data);
}

kullanırkende

$data = [
    'toplam' => '109.51',
    'tarih' => '2021-05-03',
    'paraBirimi' => 'TRY',
    'tesisatNo' => '',
    'zaman' => '18:54:38',
    'odenecek' => '118.27',
    'vergi' => '8.76',
    'gonderimSekli' => 'KAGIT'
];
var_dump(convertData($data));
/*
array(8) {
  ["toplam"]=>
  float(109.51)
  ["tarih"]=>
  string(10) "2021-05-03"
  ["paraBirimi"]=>
  string(3) "TRY"
  ["tesisatNo"]=>
  string(0) ""
  ["zaman"]=>
  string(8) "18:54:38"
  ["odenecek"]=>
  float(118.27)
  ["vergi"]=>
  float(8.76)
  ["gonderimSekli"]=>
  string(5) "KAGIT"
}
*/

// ya da json çıktısı
echo json_encode(convertData($data));
/*
{
    "toplam": 109.51,
    "tarih": "2021-05-03",
    "paraBirimi": "TRY",
    "tesisatNo": "",
    "zaman": "18:54:38",
    "odenecek": 118.27,
    "vergi": 8.76,
    "gonderimSekli": "KAGIT"
}
*/
trsherlock
1041 gün önce

Teşekkür ederim Tayfun hocam sayenizde sorunu çözdüm.

function convertData($array) {
    if (is_numeric($array)) return (float)$array;
    return $value;
}
foreach ($faturalar as $key => $val)
{
    $faturalar[$key]["toplam"] = convertData($faturalar[$key]["toplam"]);
    $faturalar[$key]["odenecek"] = convertData($faturalar[$key]["odenecek"]);
    $faturalar[$key]["vergi"] = convertData($faturalar[$key]["vergi"]);
    $faturalar[$key]["oran"] = $faturalar[$key]["vergi"] * 100 /$faturalar[$key]["toplam"];
}
// var_dump($faturalar);     

echo json_encode($faturalar);