0

我正在尝试解析 JSON 格式的字典列表,以便我可以使用它们的数据创建一组列表项,其中文本和 id 是使用此数据生成的。我将以下内容传递给我的网页,并在提供之前将其隐藏在一个隐藏的 div 中:

   [{'text': 'org1', 'id': 'org1ID'}, 
    {'text': 'org2', 'id': 'org2ID'}, 
    {'text': 'org3', 'id': 'org3ID'}]

我这样做是因为可以通过使用 ajax 执行查找将数据添加到客户端,并且相同的 ui 元素将能够使用基于订阅的观察者可观察模型查看不同的数据集。

Firebug 显示它已成功呈现为:

<div id="selection">[{'text': 'org1', 'id': 'org1ID'}, 
                     {'text': 'org2', 'id': 'org2ID'}, 
                     {'text': 'org3', 'id': 'org3ID'}]</div>

当我在这个 div 的内容上尝试 JSON.parse() 时,问题就开始了。我收到以下消息:

JSON.parse: expected property name or '}'

如果我删除 JSON.parse() ,我会得到一个 li 元素列表,但值为 Undefined 并且它们的数量也不符合预期:

<li id="Undefined">Undefined</> <!-- Repeated a number of times equal to char lengh of div html -->

请注意,如果上述内容尚未告诉您,我正在尝试遍历我的列表并从每个字典中提取信息。

我还在解析数据之前尝试了 JSON.stringify() ,但这似乎只是将数据转换为字符串,当我逐步执行时看起来像这样:

"[{'text': 'org1', 'id': 'org1ID'}, {'text': 'org2', 'id': 'org2ID'}, {'text': 'org3', 'id': 'org3ID'}]" <!-- The difference is that double qoutes have been injected. -->

至少对我来说,更令人恼火的是,如果我真的对这个数据的关联数组部分进行硬编码(正如 Javascript 所看到的那样),那么它可以正常工作。然而,为了做到这一点,我必须牺牲我当前设计的很多灵活性。除了更多的客户端处理之外,最突出的缺点是无法将我的数据结构从服务器传回。

那里的任何人都可以提供一些见解,或者可能是我可能忽略的解决方案吗?这是在 js 中使用 JSON 的常见问题吗?

更新

我发现硬编码工作方式不同的原因是 python 或 Jinja2 正在将我的数据结构转换为使用单引号而不是双引号,但是在客户端上输入它会绕过 python。在这一点上,我相信它是 python,因为在 eclipse 上单步执行会显示一个单引号的 dicts 列表。

4

1 回答 1

3

一个有效的 JSON 字符串直接表示一个 javascript 数组/对象,根本不需要任何解析。只需将其直接输出到脚本标签内的 javascript 变量:

<script>
var json_array = [{'text': 'org1', 'id': 'org1ID'}, 
    {'text': 'org2', 'id': 'org2ID'}, 
    {'text': 'org3', 'id': 'org3ID'}];
</script>

您的数据将自动保存在 javascript 数组中,无需解析。

于 2013-08-01T16:56:50.417 回答