如何正确处理 PHP 中 JSON 输出的数值类型(避免字符串化数字)
技术百科
花韻仙語
发布时间:2026-01-24
浏览: 次 本文讲解如何在调用 api 时确保 json 数据中数字字段(如 stock.value)以整型而非字符串形式输出,核心是使用 intval() 显式转换用户输入,防止 json_encode 自动将数字转为字符串。
在 PHP 构建 API 请求体时,一个常见却容易被忽视的问题是:用户通过表单(如 $_POST['stoc'])提交的值始终是字符串类型。即使输入的是纯数字(例如 200),PHP 也会将其作为字符串 "200" 存储。当该值参与 json_encode() 序列化时,它将被原样输出为 JSON 字符串 "value": "200",而非期望的数字 "value": 200。
要解决这个问题,必须在构建 $payload 数组前,对所有应为数值的字段进行显式类型转换。推荐使用 intval()(适用于整数)或 (float) 强制转换(适用于小数),而非依赖自动类型推断。
以下是你原始代码中关键部分的修正示例:
$payload[] = [
"id" => $id,
"locale" => "RO",
"hidden" => 0,
"currency" => "RON",
"brand" => "Decorepublic",
"name" => $nume,
"category_id" => 10008,
"status" => "1",
"vat" => "0",
"stock" => [[
"warehouse_id" => 1,
"value" => intval($stoc), // ✅ 关键修复:强制转为整数
]],
"sale_price" => floatval($pret), // ✅ 同理,价格建议用 floatval
"rrp" => floatval($rrp),
"description" => $nume,
"images" => array_filter([ // ✅ 建议过滤空 URL,提升健壮性
["url" => $url],
["url" => $url1],
["url" => $url2],
["url" => $url3],
], function($img) { return !empty($img['url']); }),
];⚠️ 注意事项:
- intval("200") 返回 200(int),而 intval("200.9") 会截断为 200;若需保留小数,请改用 floatval($stoc) 或 filter_var($stoc, FILTER_VALIDATE_FLOAT);
- 不要使用 (int)$stoc 替代 intval() —— 二者行为基本一致,但 intval() 更语义清晰且支持进制参数(本例无需);
- http_build_query(["data" => json_encode($payload)]) 是可行的,但更规范的做法是直接发送 JSON 格式请求体(设置 Content-Type: application/json 并传入 json_encode($payload)),不过需确认目标 API 是否接受该格式;
- print $stoc 输出 1 是因为 print 返回布尔值(成功返回 1),并非 $stoc 的值——调试请用 var_dump($stoc) 或 echo $stoc;。
总结:JSON 中的数字类型由 PHP 变量的底层类型决定

# 的是
# 就会
# 将其
# 是因为
# 也会
# 适用于
# 推荐使用
# 而非
# app
# js
# json
# go
# int
# 值类型
# 字符串
# php
# echo
# 类型转换
# 整型
# Float
# print
# 字符串类型
# 浮点
# filter_var
# 数字类型
# 浮点型
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- php怎么下载安装并配置环境变量_命令行调用PHP
- LINUX如何删除用户和用户组_Linux use
- Win11怎么关闭开机声音_Win11系统启动提示
- php和redis连接超时怎么办_phpredis
- Win10如何备份注册表_Win10注册表备份步骤
- Windows7如何安装系统镜像_Windows7
- Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡
- windows 10专注助手怎么关闭_window
- 如何使用Golang管理模块版本_Golanggo
- php打包exe怎么传递参数_命令行参数接收方法【
- 手机php怎么转mp4_手机端php文件转mp4a
- PhpStorm怎么调试PHP代码_PhpStor
- Win11怎么查看电脑配置_Win11硬件配置详细
- 如何使用Golang反射创建map对象_动态生成键
- Win11怎么查看已连接wifi密码 Win11查
- c++的static关键字有什么用 静态变量和静态
- Win11怎么关闭任务栏小图标_Windows11
- php增删改查需要哪些扩展_开启mysqli或pd
- 如何高效识别并拦截拼接式恶意域名 spam
- Win11怎么更改鼠标指针_Windows 11自
- Win11怎么关闭系统透明度_Windows11个
- c# Task.ConfigureAwait(tr
- 如何在Golang中修改数组元素_通过指针实现原地
- c++中如何进行二进制文件读写_c++ read与
- MAC如何安装Git版本控制工具_MAC开发环境配
- php转mp4怎么设置帧率_调整php生成mp4视
- 如何在 Python 中将 ISO 8601 时间
- Mac的“调度中心”与“空间”怎么用_Mac多桌面
- Win10怎样卸载DockerDesktop_Wi
- 如何使用Golang开发简单的聊天室消息存储_Go
- windows 10应用商店区域怎么改_windo
- Windows10怎么用“讲述人”读屏辅助 Win
- Win10如何卸载自带Edge_Win10彻底卸载
- Win11摄像头无法使用怎么办_Win11相机隐私
- php查询数据怎么导出csv_查询结果转csv文件
- Windows如何拦截2345弹窗广告_Windo
- 如何优化Golang Web性能_Golang H
- Ajax提交表单PHP怎么接收_处理Ajax发送的
- Win11快速助手怎么用_Win11远程协助连接教
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- Linux如何申请SSL免费证书_Linux下Ce
- Win11怎么关闭VBS安全性_Windows11
- 如何用正则与预处理高效拦截带干扰符的恶意域名
- 获取 PHP 文件最后修改时间的正确方法
- Mac电脑进水了怎么办_MacBook进水后紧急处
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- php转exe用什么工具打包快_高效打包软件推荐【
- c++中如何对数组进行排序_c++数组排序算法汇总
- Windows10电脑怎么查看硬盘通电时间_Win
- c++如何用AFL++进行模糊测试 c++ Fuz

QQ客服