【发布时间】:2017-07-30 13:44:35
【问题描述】:
我有一个 PHP 版本为 5.5.9 的测试服务器,我们有一个 PHP 版本为 5.6.16 的 QA 服务器。
为了这篇文章,我在两个实例上使用相同的代码分支(完全披露:这是一个 Laravel 安装,但我不确定这是一个 Laravel 问题)
在 QA 服务器上,API 返回 JSON 格式,其中未加引号的整数如下所示(这是简化的):
{["id":1,"name":"John"],["id":2,"name":"Sam"]}
但在我的服务器(5.6.16 版本)上,返回完全相同的 API 调用:
{["id":"1","name":"John"],["id":"2","name":"Sam"]}
而且,Angular 不喜欢这样并且不解析它。
不是数据
数据来源的数据和表格在结构上完全相同 - 我已经验证了这一点。
我不想“修复”Angular
虽然理论上 Angular 应该处理这个(?),但我不想触及我们的前端编码。
我希望输出相同..
无论 Angular 做什么,显而易见的解决方案是让输出完全相等。
我该怎么办?
- 我想避免在我的服务器上升级 PHP - 这可能会引发更多问题
- 我在想 json_encode() 中有一个设置可以设置来改变这个,但我不知道是哪一个。
- 另外,laravel 本身中可能有一个设置,至少可以在我这边进行本地更改。据记录,代码库中有超过 100 次
json_encode调用。
【问题讨论】:
-
我的猜测。它是如何加载数据的......而不是 json_encode()
-
如果数据来自数据库,可能与使用的mysql驱动有关:stackoverflow.com/questions/5323146/…
-
@jeroen 写的 100% 是您遇到的问题。一台服务器可能具有 PHP 的 mysql 本机驱动程序,而另一台则没有。如果没有
mysqlnd,PHP 无法解释数据类型,因此它将它们视为字符串,因此引用整数。您应该更新您的 PHP。另一种解决方案是手动类型转换字段 - 这可能会占用大量时间。 -
感谢@jeroen,也感谢@Mjh 为驱动程序指定PHP 升级。这是最优雅的解决方案,因为更新
json_encode()的所有实例将是不可靠的并且是 hack。
标签: php json laravel quotes string-literals