如果我要使用这个外部json文件:
{
"http://example.org/about" :
{
"http://purl.org/dc/elements/1.1/title" : [{"value" : "annas homepage" , "type" : "literal"}]
}
}
和这个外部jquery脚本在json文件中获取书的标题:
var a = 'http://example.org/about'
var b = 'http://purl.org/dc/elements/1.1/title'
$(document).ready(function() {
$("#trigger").click(function(event) {
$.getJSON('rdfjson.json', function(json) {
$('#meta').html('Title: ' + json.a.b[0].value);
});
});
});
和这个HTML代码:
<p>Click on the button to fetch data from json structure:</p>
<div id="meta">
This text will be overwritten.
</div>
<input type="button" id="trigger" value="Load Data" />
为什么它不起作用?当我在json文档和脚本中使用普通字符串时,它可以正常工作。
另外,我不明白我如何迭代整个json文件,例如,如果它更复杂或元素包含长数据包含数据等等。
非常感谢!
答案 0 :(得分:3)
因为您要查找的对象成员名为 a
,而不是名称为值的对象成员存储在变量“a”中
使用“方括号表示法”而不是使用“点符号”,而不是
$('#meta').html('Title: ' + json[a][b][0].value);
有关详细信息,请参阅此处:http://www.dev-archive.net/articles/js-dot-notation/
修改强>
如果JSON结构如此变化:
第一版:
{
"http://example.org/about" :
{
"http://purl.org/dc/elements/1.1/title" : [{"value" : "annas homepage" , "type" : "literal"}]
}
}
第二版:
{
"http://somewhereelse.com/something" :
{
"http://anotherplace.org/dc/blah-blah-blah/title" : [{"value" : "annas homepage" , "type" : "literal"}]
}
}
<强> e.g。总有一个对象,其中一个成员有一个成员
...你需要针对它:
$.getJSON('rdfjson.json', function(obj) {
for (var x in obj) {
if (obj.hasOwnProperty(x)) {
var obj2 = obj[x];
for (var x in obj2) {
if (obj2.hasOwnProperty(x)) {
$('#meta').html('Title: ' + obj2[x][0].value);
}
}
}
}
});
如果你知道关于你需要遍历的路径的更多信息,你当然可以在for
循环中添加条件:
$.getJSON('rdfjson.json', function(obj) {
for (var x in obj) {
// if you know you're looking for a key that begins with "http://"
if (obj.hasOwnProperty(x) && x.indexOf("http://") === 0) {
var obj2 = obj[x];
for (var x in obj2) {
// Check that the value is an array of at least length 1, and whose 1st value has the property "value".
if (obj2.hasOwnProperty(x) && obj2[x] instanceof Array && obj2[x].length > 0 && obj2[x][0].value) {
$('#meta').html('Title: ' + obj2[x][0].value);
}
}
}
}
});
答案 1 :(得分:0)
您需要使用方括号表示法:
json[a][b][0].value
允许您使用变量选择属性(不能使用点表示法)。
请参阅http://www.jibbering.com/faq/faq_notes/square_brackets.html
答案 2 :(得分:0)
$('#meta').html('Title: ' + json.a.b[0].value);
应该是
$('#meta').html('Title: ' + json[a][b][0].value);
答案 3 :(得分:0)