我在数据库中有一个数组,它看起来像这样:{"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"]}" } }
答案 0 :(得分:1)
您的数据不适合JSON.stringigy
,它非常适合JSON.parse
,它会将字符串转换为对象。如果要输出原始字符串,只需删除JSON.stringify
;如果要将数据用作obejct,则删除JSON.parse
。
答案 1 :(得分:1)
问题是你的元数据数组不干净;您想要的位埋在单行数组内的关联数组中。所以试试:
$metadata = $this->repository->getMetadata($id);
return $this->render('AcmeQuotesBundle:Home:metadata.html.twig', array('data' => $metadata[0]['quoteMetadata']));