需要在json_encode()中使用数字作为字符串 - PHP

时间:2017-12-13 10:01:21

标签: php

我在PHP 5.5.9上构建我的Rest Apis,其中json_encode()将数值作为字符串返回,但现在我在PHP 5.6的不同服务器上设置相同的Rest Apis,这里json_encode()返回数字值为数字,

但我需要与PHP 5.5.9相同的行为,因为我的客户端应用程序非常庞大,我在所有客户端应用程序中都将数字作为字符串值处理,因此目前我无法将数字作为数字处理,我需要数字作为字符串,我怎么能实现这个?

对于数据

array("id" => 1);

在我的原始服务器上,基于5.5.9,我得到了这样的响应:

{"id": "1"}

现在在另一台基于5.6的服务器上,我得到这样的响应:

{"id": 1}

但我需要在我的新服务器上以这种形式回复:

{"id": "1"}

有人能为我提供合适的解决方案吗?

修改

“我有多维数组,我从数据库中获取数据。我无法修改所有的Api代码”

示例回复:

[   
    {
        "id": 4220,
        "user_id": 151,
        "truckId": 8,
        "truckType": "",
        "InsertionDateTime": "2017-05-30 08:25:20",
        "flag": 1
    }, 
    {
        "id": 4221,
        "user_id": 151,
        "truckId": 8,
        "truckType": "",
        "InsertionDateTime": "2017-05-30 08:34:28",
        "flag": 1
    }
]

3 个答案:

答案 0 :(得分:2)

您可以简单地将string强制转换为array("id" => (string)1); ,例如:

json_encode

这会强制1"1"解析为function intToString($array) { $newArr = $array; foreach($array as $key => $value) { if(is_int($value)) { $newArr[$key] = (string)$value; } elseif(is_array($value)) { $newArr[$key] = intToString($value); } } return $newArr; } Demo

编辑:您可以使用以下函数对多维数组进行类型转换(DEMO):

function intToString($array, $type = 'array')
{
    $newArr = $array;
    foreach($array as $key => $value)
    {
        if($type == "array")
        {
            if(is_int($value))
            {
                $newArr[$key] = (string)$value;
            }
            elseif(is_array($value))
            {
                $newArr[$key] = intToString($value);
            }
            elseif(is_object($value))
            {
                $newArr[$key] = intToString($value, 'object');
            }
        }
        elseif($type == "object")
        {
            if(is_int($value))
            {
                $newArr->$key = (string)$value;
            }
            elseif(is_array($value))
            {
                $newArr->$key = intToString($value);
            }
            elseif(is_object($value))
            {
                $newArr->$key = intToString($value, 'object');
            }
        }
    }
    return $newArr;
}

编辑2:要处理数组对象,请尝试以下方法(DEMO):

/webhooks/v1/systems/data/hooks

答案 1 :(得分:0)

显然有一个提案类似于您提出的问题,并被拒绝:https://why-cant-we-have-nice-things.mwl.be/requests/json-numeric-as-string

据我所知,所以在输出端有办法做到这一点。你必须像其他建议的那样在输入端进行转换。遍历您的数据集并转换值。除非你有数十亿的价值观,否则你的表现不应该明显消耗。

答案 2 :(得分:0)

你可以迭代改变字符串,因为@ mega6382用递归方式说

$jsonObj = json_decode($arr);
function changeToStr(&$obj){
  foreach($obj as &$elem){
    if(gettype($elem)!= "object"){
      $elem = (string)$elem;
    }else{
      changeToStr($elem);
    }
  } 
};
changeToStr($jsonObj);
echo json_encode($jsonObj);

查看现场演示:https://eval.in/918430

输出:

[{
    "id": "4220",
    "user_id": "151",
    "truckId": "8",
    "truckType": "",
    "InsertionDateTime": "2017-05-30 08:25:20",
    "flag": "1"
}, {
    "id": "4221",
    "user_id": "151",
    "truckId": "8",
    "truckType": "",
    "InsertionDateTime": "2017-05-30 08:34:28",
    "flag": "1"
}]