将JSON从PHP返回到Array

时间:2012-08-16 20:22:43

标签: php javascript json jquery

我想获取返回的JSON对象并显示返回的PHP查询,但是当我使用括号访问indices值时,它一次只显示一个字符。基本上我希望每个索引都包含查询中的每一行。此特定查询有两个结果(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);

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

首先,您希望将查询结果存储到数组中,不是字符串。调用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

答案 2 :(得分:1)

我在@ 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对象来访问我的数据库并返回数组而不是对象。这应该适用于数组,但我相信它也适用于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部分 - 就是你所需要的,也许它会帮助那些发现这个问题的人。