【问题标题】:Returning JSON from PHP into Array将 JSON 从 PHP 返回到数组
【发布时间】:2012-08-16 20:22:42
【问题描述】:

我想获取返回的 JSON 对象并显示 PHP 查询返回的内容,但是当我使用方括号访问索引值时,它一次只显示一个字符。基本上我希望每个索引都包含查询中的每一行。这个特定的查询有两个结果(id 和文件名)。我想将 id 和 name 都放入 JSON 数组的一个索引中。输出显示如下:

7 5.jpg
8 7-mini.jpg

这是我的代码...

<script type="text/javascript">

  $(function(){
    $.ajax({                                      
      url: '<?php echo base_url().'jqueryDB/jquery';?>',   
      type:'POST',      
      dataType: 'json',    
      success: function(output_string){
                document.write(output_string[0]);
      }
    });

  }); 

现在这个显示'7',而不是'7 5.jpg'。如何让它将每一行存储到一个索引中?

这是我的 PHP 文件:

    $userID = $this->session->userdata('id');   
    $query = $this->db->query('SELECT * FROM upload WHERE userID = '.$userID);
    $num_rows = $query->num_rows();
    $val = $query->row_array();    

    $output_string = "";  

    foreach ($query->result() as $row){
        $output_string .= $row->id;
        $output_string .= " ".$row->name."<br />";
    }

    echo json_encode($output_string);

【问题讨论】:

  • 我会使用 PARSE 而不是 dataType ...var obj = jQuery.parseJSON(your_var);

标签: php javascript json jquery


【解决方案1】:
...
$output = array();
foreach ($query->result() as $row) {
  $output[] = $row->id . ' ' . $row->name;
}
echo json_encode($output);

【讨论】:

    【解决方案2】:

    首先,您要将查询结果存储到数组中,而不是字符串。调用json_encode 的结果将采用该数组并将其转换为 JSON 编码的字符串。

    $output_array = array();
    
    foreach($query->result() as $row) {
        $output_array[] = array( 'id' => $row->id, 'name' => $row->name );
    }
    
    echo json_encode( $output_array );
    

    请注意,您传递给它的数组可以任意深。 json_encode 将根据数组的结构来构造对象。我还建议在您的浏览器中查看生成的字符串,以了解在对这样的多维数组进行编码时 JSON 的样子。

    在您的 javascript 中,您必须 解析 字符串以使其成为有用的 JavaScript 对象...

    success: function(output_string){
        var obj = JSON.parse( output_string );
        // This will iterate over all of the values in the return object
        for(var i in obj) {
            document.write(obj[i].name + '<br>' + obj[i].id);
        }
    }
    

    请随意以不同的方式构造您的返回对象,我只是偏离了您在问题中提出的内容。

    jQuery 还有一些功能,如果您正确指定 MIME 类型,success 回调的参数将自动为您解析为 JSON 对象。有关详细信息,请参阅jQuery documentation

    【讨论】:

    • 这可能是更好的答案 :) 我的答案只是让您快速到达终点,观察者还为您提供了有用的细节。
    【解决方案3】:

    我在@watcher 的答案出现之前写了大部分内容,这可能是您想要的,但已经写好了,所以我想我会发布它。我会像这样修改@David Fells 解决方案:

    $output = array();
    foreach ($query->result() AS $row) {
      $output[$row->id] = array();
    
      foreach ($row AS $prop=>$value) {
        $output[$row->id][$prop] = $value;
      }
    }
    
    $output_json = json_encode($output);
    

    我通常使用 PDO 对象来访问我的 DB,它返回一个数组而不是对象。这应该适用于数组,但我相信它也适用于 PHP 中的对象。

    这应该适用于返回名为 id 的列的任何查询,并且显然 id 部分可以替换为 $id ,其中 $id 等于您想要使用的任何 id 字符串/整数。

    ...

    现在,当您想要在 PHP 中返回数组时(我不是特别熟悉 javascript)你需要使用:

    // The TRUE returns it as an array rather than object.
    $output = json_decode($output_json, TRUE);
    

    其中大部分是非常基本的,我想你已经知道了。但标题让我觉得最后一部分 - json_decode 部分 - 是你需要的,也许它会帮助其他发现这个问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2010-10-15
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多