我正在尝试解析 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 列表。