簡體   English   中英

強制 json_encode 在平面數組中創建數值字符串

[英]Force json_encode to create strings of numeric values in a flat array

我必須將 PHP 數組 json_encode 編碼為 JavaScript 數組。 不幸的是,如果它包含整數而不是字符串,我使用的 jQuery 庫將無法正確處理該數組。

大多數情況下,這將生成僅包含字符串的正確數組:

json_encode($data)

即使$data只包含數字,我通常也會得到這個:

["3","7","8"]

但有時,我會得到這樣的結果(注意零):

["9691","1792","26","1","4","15",0,"1"]

或者這個

[16171,15470,10390,7585]

(注意,這顯然是不同的數據來說明發生了什么)。 我需要強制 json_encode 將數組值視為字符串。 我知道有強制數字的相反選項 JSON_NUMERIC_CHECK。 等價物真的不存在嗎? 似乎我唯一的選擇是在 JavaScript 端再次處理數組,這雖然可能,但在某種程度上破壞了我的對象的封裝。

如果有JSON_NUMERIC_CHECK的反面JSON_NUMERIC_CHECK但看起來沒有。

為什么不能在編碼之前確保 php 中的數據類型正確?

這可能意味着您必須手動將其轉換為字符串...

在您的數組中將它們定義為字符串,或者如果它來自其他地方:

$data = json_encode(array_map('strval', $data));

json_decode()可以將大整數轉換為字符串,如果您在函數調用中指定一個標志:

$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)

因為JSON_NUMERIC_CHECK沒有相反的標志, JSON_NUMERIC_CHECK我為此創建了一個函數。
它接受一維和多維數組,並且可以添加條件來驗證 te 數組的每個元素。

function JSON_NUMERIC_STRING($array){
    foreach($array as $key => &$value){
        if(is_array($value)){
            $value = iterateMA($value);
        }elseif(is_numeric($value)){
            $value = strval($value);
        }
        // add more conditions if needed...
    }
    return $array;
}

$array = JSON_NUMERIC_STRING($array);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM