如何将数组转换为字符串,适用于JSON.stringify



我在数据库中有一个数组,它看起来像这样: {"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:xampphtdocs...

我正在使用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"]}" } } 

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

$metadata = $this->repository->getMetadata($id);
return $this->render('AcmeQuotesBundle:Home:metadata.html.twig', array('data' => $metadata[0]['quoteMetadata']));

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

最新更新