0

我在数据库中有一个数组,它看起来像这样:{"hello":"world", "Test":["hello"]},非常适合JSON.stringify,但是当我从数据库中选择它时,如下所示:

$metadata = $this->repository->getMetadata($id);

$data = json_encode($metadata);

return $this->render('AcmeQuotesBundle:Home:metadata.html.twig', array('data' => $data));

并将其放入模板中:

{% block body %}
    <script>
        var obj = {{ data|raw }}

        document.body.innerHTML = "";
        document.body.appendChild(document.createTextNode(JSON.stringify(obj, null, 4)));
    </script>
{% endblock %}

我得到这个输出:

[
    {
        "quoteMetadata": "{\"hello\":\"world\", \"Test\":[\"hello\"]}"
    }
]

这不是我想要的。我想要的只是obj作为本机字符串的值 -{"hello":"world", "Test":["hello"]}没有"quoteMetadata":, 没有引号并且没有"\"周围的单词。我尝试使用implode(),但我注意到:

Notice: Array to string conversion in C:\xampp\htdocs...

我正在使用 Symfony2、Twig 和 Doctrine2,我正在做这一切,因为我希望数据库中的字符串以一种易于阅读的方式显示,比如这里 - http://jsfiddle.net/AndyE/HZPVL/如果你有任何想法如何解决这个问题或如何以另一种方式制作它,请分享!


编辑

当我放var_dump($matadata)之后$metadata = $this->repository->getMetadata($id);,我得到了这个:

array(1) { [0]=> array(1) { ["quoteMetadata"]=> string(35) "{"hello":"world", "Test":["hello"]}" } } 
4

2 回答 2

1

您的数据不适合JSON.stringigy,它非常适合JSON.parse,它将字符串转换为对象。JSON.stringify如果您想输出原始字符串,或者JSON.parse如果您想将数据用作对象,只需删除它。

于 2012-09-26T11:22:14.450 回答
1

问题是您的元数据数组不干净;您想要的位被埋在单行数组内的关联数组中。所以试试:

$metadata = $this->repository->getMetadata($id);
return $this->render('AcmeQuotesBundle:Home:metadata.html.twig', array('data' => $metadata[0]['quoteMetadata']));
于 2012-09-26T11:25:49.030 回答