我正在尝试以JSON格式解析字典列表,以便我可以使用它们的数据创建一组列表项,其中使用此数据生成文本和id。我将以下内容传递到我的网页,并在提供之前将其存放在隐藏的div中:
[{'text': 'org1', 'id': 'org1ID'},
{'text': 'org2', 'id': 'org2ID'},
{'text': 'org3', 'id': 'org3ID'}]
我这样做是因为可以通过使用ajax执行查找将数据添加到客户端,并且相同的ui元素将能够使用基于订阅的观察者可观察模型查看不同的数据集。 p>
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将我的数据结构转换为使用单引号而不是double,但是在客户端上输入它会绕过python。在这一点上,我相信它是蟒蛇,因为在eclipse上逐步显示一个单引号的dicts列表。
答案 0 :(得分:3)
有效的JSON字符串直接表示javascript数组/对象,根本不需要任何解析。只需将其直接输出到脚本标记内的javascript变量:
<script>
var json_array = [{'text': 'org1', 'id': 'org1ID'},
{'text': 'org2', 'id': 'org2ID'},
{'text': 'org3', 'id': 'org3ID'}];
</script>
您的数据将自动存储在javascript数组中,无需解析。