【问题标题】:How to correct syntax in php using json_encode如何使用 json_encode 更正 php 中的语法
【发布时间】:2018-05-28 16:42:02
【问题描述】:

我正在尝试将 json_encode 输出为:{"match_all":{}}。 我写的示例程序是:

<?php
    $qarray=Array("match_all"=>Array());
    print_r(json_encode($qarray));
?>

但上面给了我下面的o/p: {"match_all":[]}

【问题讨论】:

    标签: php json object


    【解决方案1】:

    在 PHP 中,array 可以将字符串作为键(也称为关联数组),当 JSON 编码时,它会转换为 JSON 对象({})。但是,如果该数组只有数字键,则该数组被编码为 JSON 数组 - list ([])。

    要创建一个空的 JSON 对象,您需要在 PHP 中创建一个空的 object 而不是空的 array

    $qarray = ['match_all' => (object)[]];
    print_r(json_encode($qarray));
    

    【讨论】:

    • 可能是因为您的回答与已经发布的非常相似。
    • 谢谢,打错了:)
    【解决方案2】:

    您得到的结果是预期的,因为[] 表示 JSON 数组而不是 JSON 对象。如果您需要一个对象,则需要明确提供一个对象,例如

    <?php
    $qarray = Array("match_all"=>(object)Array());
    print_r(json_encode($qarray));
    

    然而,这并没有什么实际意义,因为当你给它关联数组时,Json 编码会正确地创建对象,例如

    <?php
    $qarray = [ "match_all"=> [ "assoc" => true ] ];
    print_r(json_encode($qarray));
    

    打印:

    {"match_all":{"assoc":true}}

    就 JSON 编码而言,关联数组是指任何没有序列号作为索引的数组。

    另外,在我看来,短数组语法看起来更容易一些,但与使用 Array() 并没有什么不同

    【讨论】:

    • apokryfos 在速度和解释上获胜! +1(解释对于低垂的果实至关重要)
    【解决方案3】:

    您想要的是object 而不是array。这将生成您想要的输出。

    $qarray = array("match_all" => new stdClass());
    print_r(json_encode($qarray));
    

    https://www.w3schools.com/js/js_json_objects.asp

    【讨论】:

      【解决方案4】:

      作为其他提供的答案的插件,如果您有多个值,每次将它们全部转换为对象会很烦人,因此您可以很容易地在声明后添加一个循环以将所有值设置为对象。

      $qarray=Array("match_all"=>Array());
      
      foreach($qarray as $key => $val) {
          if(!is_array($val)) continue;
          $qarray[$key] = (object)$val;
      }
      
      print_r(json_encode($qarray));
      

      这使得代码更加动态,因为无论有多少键,只要值是数组,它们的值都会在编码之前设置为对象。

      【讨论】:

        【解决方案5】:

        PHP json_encode 函数有选项标志作为第二个参数。 你可以把它设置为 JSON_FORCE_OBJECT,然后就会得到你想要的结果。

        试试这个代码。

        <?php
            $qarray=Array("match_all"=>Array());
            print_r(json_encode($qarray, JSON_FORCE_OBJECT));
        ?>
        

        【讨论】:

          【解决方案6】:

          你应该指定这是一个对象,而不是一个数组:

          $qarray=Array("match_all"=>(object) Array());
          print_r(json_encode($qarray));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-10-29
            • 1970-01-01
            • 2011-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-20
            相关资源
            最近更新 更多