修改 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 对象的主要内容,如果未能解决你的问题,请参考以下文章