【问题标题】:Modifying a JSON object returned with PDO修改 PDO 返回的 JSON 对象
【发布时间】: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 表示法了。

标签: javascript json pdo handlebars.js


【解决方案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。

        【讨论】:

        • 确实,从现在开始我将使用它。谢谢!
        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多