代码之家  ›  专栏  ›  技术社区  ›  Itay Moav -Malimovka

如何将PHP数组编码为JSON数组,而不是对象?

  •  8
  • Itay Moav -Malimovka  · 技术社区  · 15 年前

    我正在尝试对Zend_数据库查询返回的数组进行json_编码。

    var_dump给出:(手动添加0成员不会更改图片。)

    array(3) {
      [1]=>
      array(3) {
        ["comment_id"]=>
        string(1) "1"
        ["erasable"]=>
        string(1) "1"
        ["comment"]=>
        string(6) "test 1"
      }
      [2]=>
      array(3) {
        ["comment_id"]=>
        string(1) "2"
        ["erasable"]=>
        string(1) "1"
        ["comment"]=>
        string(6) "test 1"
      }
      [3]=>
      array(3) {
        ["comment_id"]=>
        string(1) "3"
        ["erasable"]=>
        string(1) "1"
        ["comment"]=>
        string(6) "jhghjg"
      }
    }
    

    编码字符串如下:

    {"1":{"comment_id":"1","erasable":"1","comment":"test 1"},
     "2":{"comment_id":"2","erasable":"1","comment":"test 1"},
     "3":{"comment_id":"3","erasable":"1","comment":"jhghjg"}}
    

    我需要的是:

    [{"comment_id":"1","erasable":"1","comment":"test 1"},
    {"comment_id":"2","erasable":"1","comment":"test 1"},
    {"comment_id":"3","erasable":"1","comment":"jhghjg"}]
    

    php.ini/json_编码文档认为应该是这样的。

    4 回复  |  直到 15 年前
        1
  •  12
  •   Seb    15 年前

    如何设置初始数组?

    如果设置如下:

    array(
     "1" => array(...),
     "2" => array(...),
    );
    

    然后,您就没有了一个包含数字索引但带有字符串的数组,并且该数组被转换为JS世界中的一个对象。如果不设置严格的顺序(即从0开始而不是1),也可能发生这种情况。

    不过,这是在黑暗中拍摄的,因为我看不到您的原始代码:首先尝试设置数组而不使用任何键:

    array(
     array(...),
     array(...),
    );
    
        2
  •  6
  •   Community Erin Dees    7 年前

    添加了可扩展的信息 Seb 的答案。

    php > print json_encode( array( 'a', 'b', 'c' ) ) ;
    ["a","b","c"]
    php > print json_encode( array( 0 => 'a',  1 => 'b', 2 => 'c' ) ) ;
    ["a","b","c"]
    php > print json_encode( array( 1 => 'a',  2 => 'b', 3 => 'c' ) ) ;
    {"1":"a","2":"b","3":"c"}
    php > 
    

    注意:它以正确的方式格式化它:

    如果你要发送

    {"1":"a","2":"b","3":"c"}
    

    作为

    ["a","b","c"]
    

    当你这样做的时候 $data[1] 在PHP中,您将返回“a”,但在JavaScript方面,您将返回“b”。

        3
  •  2
  •   Richard Levasseur    15 年前

    在PHP中测试传统连续数组的一种常见方法是检查索引“0”。尝试将其添加到数组中,它可能会将其视为数组而不是哈希图。

        4
  •  -3
  •   harry    12 年前

    我遇到了一个类似的问题,在JSON U编码字符串周围添加“”(单引号)后,它开始工作。 以下来自我的JS文件:

    var myJsVar =  <?php echo json_encode($var); ?> ;    -------> NOT WORKING  
    var myJsVar = '<?php echo json_encode($var); ?>' ;   -------> WORKING