防止 json_decode 变成 false 为空值

问题描述 投票:0回答:4

使用 json_decode 时, false 的布尔值会变成空值。我使用的 json 字符串的值可以为空、false、1 或某个文本值,并且我只想使用具有值的字段,即使该值为 false。所以做的时候

$array = array();
foreach($obj as $key => $value){
  if($value != ''){
    $array[$key] = $value;
  }
}

具有错误值的字段不会保存到 $array 中。有办法解决吗?

更新:执行 print_r($obj) 时,所有 false 值均为空。所以我不认为 != 是问题所在。如果我 print_r json 字符串空值是“null”,假值是“false”,但是当 print_r-ing json_decoded 对象时,两者都会变成空值。

php json
4个回答
2
投票

如果您想检查空字符串而不考虑其他

empty
值,请使用
!==
而不是 !=


2
投票

你的虚假消失是因为

if($value != ''){

使用

if($value !== ''){

因为 php 中的 false 是空的并且你的验证 != 阻止 false 通过


1
投票

将比较从

!=
更改为
!==

$array = array();
foreach($obj as $key => $value){
  if($value !== ''){
    $array[$key] = $value;
  }
}

0
投票

这个问题在 Google 中排名很高,因此值得分享一些事实以避免混淆:

  • 尽管标题可能暗示,

    json_decode()
    没有能力将
    false
    变成空字符串
    ,甚至不是故意的。如果您在基于 JSON 的应用程序中遇到这种情况,则错误一定是在其他地方。

  • print_r() 不是检查布尔变量的可靠工具,因为它将所有内容转换为字符串,而 PHP 将布尔 false 转换为空字符串。使用 var_dump() 来代替。

    $input = [true, false, ''];
    print_r($input);
    var_dump($input);
    
    Array
    (
        [0] => 1
        [1] => 
        [2] => 
    )
    array(3) {
      [0]=>
      bool(true)
      [1]=>
      bool(false)
      [2]=>
      string(0) ""
    }
    
  • PHP 有两个 ≠ 运算符:宽松 (

    !=
    ) 和严格 (
    !==
    )。前者将应用类型转换来决定值是否匹配,后者将在类型不同时拒绝相等。当您需要区分 null、false、空字符串、数字零和以零开头的字符串时,您特别希望避免使用松散运算符。

© www.soinside.com 2019 - 2024. All rights reserved.