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

問題は、メタデータ配列がクリーンでないことです。必要なビットは、単一行配列内の連想配列に埋め込まれています。だから試してみてください:

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

あなたのデータは、文字列をオブジェクトに変換するJSON.stringigyのに最適です。JSON.parse生の文字列を出力する場合は をドロップするJSON.stringifyJSON.parse、データをオブジェクトとして使用する場合はドロップします。

于 2012-09-26T11:22:14.450 に答える