我在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
}
]
答案 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"
}]