修改 PDO 返回的 JSON 对象

Posted

技术标签:

【中文标题】修改 PDO 返回的 JSON 对象【英文标题】:Modifying a JSON object returned with PDO 【发布时间】:2012-06-30 03:58:03 【问题描述】:

我正在尝试返回使用带有把手的 JSON 对象。制作一个小待办事项列表来学习如何使用它。

我的 php API 如下:

$query = "SELECT *
          FROM table";
try

    $db = getConnection();
    $response = $db->query($query);
    $todo = $response->fetchAll(PDO::FETCH_OBJ);
    $bdd = null;
    echo json_encode($todo);

然后它返回类似:

["id":"1","todo":"Do something","who":"Me","is_done":"0","id":"2","todo":"Learn JSON","who":"Me","is_done":"0"]

但我实际上需要它是这样的:

todos: ["id":"1","todo":"Do something","who":"Me","is_done":"0","id":"2","todo":"Learn JSON","who":"Me","is_done":"0"]

我尝试在我的 PHP API 中添加而不是 echo json_encode($todo)

echo 'todos: ' . json_encode($todo) . '';

但它不起作用。有什么想法吗?

【问题讨论】:

“它不起作用” => 它有什么作用? 当我直接在 PHP API 中添加它时,Handlebars.js 拒绝解析生成的 json 对象。在最终的 html 中,我看到了“title”。 你的 todos 关键字周围必须有 " 符号 试试echo '"todos": ' . json_encode($todo) . ''; 谢谢大家,成功了!我忘记了。我想我得重新学习一下 JSON 表示法了。 【参考方案1】:

您的“todos”属性名称必须用双引号括起来。

echo '"todos": ' . json_encode($todo) . '';

虽然 javascript 语法允许属性名称不带引号,但严格的 JSON 坚持使用它们。

【讨论】:

【参考方案2】:

虽然 Pointy 的回答是正确的(可能想了解JSON),但您也可以这样做:

echo json_encode(array('todos' => $todo));

PHP 关联数组将作为对象序列化为 JSON (json_encode() example in Manual)。

【讨论】:

【参考方案3】:

试试看:

 echo ' "todos" : ' . json_encode($todo) . '';

【讨论】:

【参考方案4】:

试试这个:

echo json_encode(array( 'todos' => $todo ));

与其自己制作 JSON,不如制作你想要的结构,然后让 PHP 为你制作 JSON。

【讨论】:

确实,从现在开始我将使用它。谢谢!

以上是关于修改 PDO 返回的 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

2017年7月27~~~

PDO getColumnMeta 没有 JSON 的本机类型

mysql返回修改后

我应该在 PDO 对象中返回啥来生成可靠的代码?

控制器返回后修改 JSON 对象

PHP PDO学习小结