【问题标题】:Build JSON with php echo statements使用 php echo 语句构建 JSON
【发布时间】:2011-10-29 06:04:07
【问题描述】:

我正在尝试从 php 数组构建 JSON 数组 这是我在控制器中的功能

function latest_pheeds() {
            if($this->isLogged() == true) {
            $this->load->model('pheed_model');
            $data = $this->pheed_model->get_latest_pheeds();
            $last = end($data);
            echo "[";
                for($i = 0; $i < count($data); $i++) {
                    echo '{"user_id":"'.$data[$i][0]['user_id'].'",';
                    echo '"pheed_id":"'.$data[$i][0]['pheed_id'].'",';
                    echo '"pheed":"'.$data[$i][0]['pheed'].'",';
                    echo '"datetime":"'.$data[$i][0]['datetime'].'",';
                        if($i == count($data)) {
                        echo '"comments":"'.$data[$i][0]['comments'].'"}';
                        }else {
                            echo '"comments":"'.$data[$i][0]['comments'].'"},';
                        }
                    }

                echo "]";
            }
            return false;
    }

它返回一个像这样的json数组

[{"user_id":"9","pheed_id":"2","pheed":"This is my first real pheed, its got potential ","datetime":"1313188898","comments":"0"},{"user_id":"9","pheed_id":"11","pheed":"My stomach being hurting all day","datetime":"1313422390","comments":"0"},{"user_id":"9","pheed_id":"11","pheed":"My stomach being hurting all day","datetime":"1313422390","comments":"0"},{"user_id":"9","pheed_id":"10","pheed":"Thank God for stackoverflow.com ","datetime":"1313358605","comments":"0"},]

但我似乎无法使用 jquery 访问它

【问题讨论】:

  • 你需要那个逗号吗
  • 你是如何尝试用 jQuery 访问它的?
  • 正如建议的那样,末尾的逗号破坏了 json 解码。此外,正如@derekerdmann 的提问者所建议的那样,为此使用 json_encode,这就是它的意义所在。
  • 是的,只需将您的 PHP 数组 交给 json_encode() 函数即可。
  • 我在 PHP 和 javascript 之间一直使用 json_encode。您应该重新访问您的代码并执行相同的操作。无需自己包装。

标签: php javascript mysql json codeigniter


【解决方案1】:

我认为问题在于数组末尾的逗号。

与其尝试自己编码,不如使用 PHP 的 json_encode 函数。它已经过无数次的测试和验证,因此您不必重新发明轮子。

【讨论】:

  • @MrFoh:这是一个不同的问题。我建议设置您的标头以表明您正在返回 JSON。
【解决方案2】:

已经对@derekerdmann 投了赞成票,但我想我会补充...

如果您更改,您的代码将起作用:

if($i == count($data)) {

if($i == count($data) - 1) {

但是,不要那样做。如果您只是将 $data 数组的每个成员的所有内容放入 json 中,那么您应该可以只使用 json_encode($data)。如果您只提取某些部分,则构建一个过滤数据的辅助数组,然后 json_encode 代替。

function latest_pheeds() {
    if($this->isLogged() == true) {
        $this->load->model('pheed_model');
        $data = $this->pheed_model->get_latest_pheeds();
        $filtered_items = array();
        foreach ($data as $member) {
            $filtered_item = array();
            $filtered_item['user_id'] = $member['user_id'];
            $filtered_item['pheed_id'] = $member['pheed_id'];
            ...
            ...
            $filtered_items[] = $filtered_item;
        }
        echo json_encode($filtered_items);
    }
    return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多