【问题标题】:PHP JSON API - detect data types of return valuesPHP JSON API - 检测返回值的数据类型
【发布时间】:2020-09-22 08:49:09
【问题描述】:

我正在处理一个PHP JSON API,它返回json_encoded 多维数组。 由于事实上,PHP 是一种弱类型语言 - 我在客户端返回的数据类型存在一些问题,例如整数作为字符串返回。

回复示例

json 编码前

array() {
  ["users"]=>
  array() {
    ["id"]=>
    string(3) "983"
    ["email"]=>
    string(28) "xxx.xxx@xxx.xxx"
    ["username"]=>
    string(8) "xxx"
    ["verified"]=>
    string(1) "2"
    ["tutorial_completed"]=>
    string(1) "1"
  }
  ["companies"]=>
  array() {
    ["id"]=>
    string(3) "170"
    ["name"]=>
    string(0) "xxx"
    ["trusted"]=>
    string(1) "1"
  }
}

json 编码后

data: {
   users: {
     id: "983",
     email: "xxx@xxx.xxx",
     username: "xxx",
     verified: "2",
     tutorial_completed: "1",
   },
   companies: {
     id: "170",
     name: "xxx",    
     trusted: "1",
   }
}

我从MySQL table 获取数据。 这些值基本上是按原样取的。

一种可行的解决方案是检查每个键,然后将数值转换为 intval()floatval() - 但这意味着需要付出巨大努力才能获得更大的数组,而且该解决方案缺乏灵活性.

它们是一种自动检测数据类型是否也可以是数值的平滑方法,如果可以,则进行转换?

【问题讨论】:

  • 前端有没有办法发送不带引号的整数?
  • @Oyeme,抱歉我没明白问题:)

标签: php json casting


【解决方案1】:

问题:当你从 PHP 中从 MySQL 数据库中获取数据时,无论数据库中的字段是什么类型,结果中的字段都是字符串类型或 NULL。这个和MYSQL驱动有关。

解决办法: 您需要自己将数值转换为数组中所需的类型。或者,当您转换为 json 时,您可以简单地使用:

$encoded = json_encode($data, JSON_NUMERIC_CHECK);

数字字段将自动为您转换。

【讨论】:

【解决方案2】:

您可以在从mysql 获取数据的循环中使用is_int() 函数,并在制作数组时使用intval() 返回true,希望对您有所帮助

【讨论】:

  • 我已经尝试过那个,但是is_int() 正在返回false,因为PHP 认为它是string。如果我用gettype() 检查值,我会得到“字符串”。
猜你喜欢
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多