【问题标题】:json_encode array return string without indexjson_encode 数组返回没有索引的字符串
【发布时间】:2021-10-09 07:13:36
【问题描述】:

我正在为我的 linux 可执行文件构建一个简单的 GUI。我只是使用 HTML/Javascript 和 PHP。我的问题是使用system 以json 字符串作为参数调用我的可执行文件,我的字符串在数组中没有索引。这是我的代码

$b = [0=>[1,2,3],1=>[4,5,6]];

var_dump(json_encode($b,JSON_NUMERIC_CHECK));

string(17) "[[1,2,3],[4,5,6]]"

我需要带键的字符串,因为 c/c++ 代码需要索引,为什么会这样?如何解决?谢谢

【问题讨论】:

    标签: php arrays json user-interface


    【解决方案1】:

    JSON 实际上是一个字符串化的 Javascript,如果你想表示一个键 => 值结构,这些结构应该是对象或关联数组。 PHP 将假定任何只有数字的关联数组作为常规数组的键,因此您应该将数组转换为对象。对象不能将数字作为键(属性),因此它们将被转换为字符串,因此您实际上将拥有 '0' => [1,2,3] ... 等等。

    最简单的方法就是将数组转换为对象。看下面的例子:

    <?php
      $array = [0=>[1,2,3],1=>[4,5,6]];
      $object = (object) $array;
      print json_encode($array);
      print json_encode($object);
    ?>
    

    输出:

    [[1,2,3],[4,5,6]]{"0":[1,2,3],"1":[4,5,6]}
    

    加法:

    解码 JSON 时,您可以进行相反的转换,即转换为数组:

    <?php
     $arr = (array)json_decode('{"0":[1,2,3],"1":[4,5,6]}');
     var_dump($arr);
     $obj = json_decode('{"0":[1,2,3],"1":[4,5,6]}');
     var_dump($obj);
    ?>
    

    输出:

    array(2) {
      [0]=>
      array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
      [1]=>
      array(3) {
        [0]=>
        int(4)
        [1]=>
        int(5)
        [2]=>
        int(6)
      }
    }
    object(stdClass)#1 (2) {
      ["0"]=>
      array(3) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
      }
      ["1"]=>
      array(3) {
        [0]=>
        int(4)
        [1]=>
        int(5)
        [2]=>
        int(6)
      }
    }
    

    【讨论】:

    • 好的,谢谢。我解决了将 0 设置为 *.在 c 中,atoi 会将其转换为 0
    • 你可以在解码结果时进行相反的转换,即$array = (array)json_decode('{"0":[1,2,3],"1":[4,5,6]}');
    • 我对答案做了一个小补充,以说明如何做以及有什么区别。
    【解决方案2】:

    您可以使用 JSON_FORCE_OBJECT 标志强制使用带有 json_encode 的数字键:

    var_dump(json_encode($b,JSON_NUMERIC_CHECK|JSON_FORCE_OBJECT));
    

    【讨论】:

    • 好的,它正在工作......现在字符串有索引。但是可执行文件不起作用:(
    • 能否提供代码给我们看看?
    • 无论如何问题都存在很长。也许 c/c++ json 解析失败。它使用黄麻
    猜你喜欢
    • 2018-07-13
    • 2017-09-09
    • 2021-04-16
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2013-10-16
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多