我正在努力在这个网址中的json上检索一些值:
网址数据如下所示:
[
{
"key":{
"parentKey":{
"kind":"user",
"id":0,
"name":"test 1"
},
"kind":"smsgateway",
"id":5707702298738688
},
"propertyMap":{
"content":"test1 content",
"date":"Dec 12, 2013 2:58:57 PM",
"user":"test1"
}
}]
通过忽略“key”,我想使用javascript代码访问“propertyMap”对象(内容,日期和用户)的值。 我尝试过这段代码,但无法得到结果:
var url = "http://go-gadget.googlecode.com/svn/trunk/test.json";
$.getJSON(url, function (json) {
for (var i = 0; i < json.length; i = i + 1) {
var content = json[i].propertyMap.content;
console.log('content : ', content);
var user = json[i].propertyMap.user;
console.log('user: ', user);
var date = json[i].propertyMap.date;
console.log('date : ', date);
}
});
(此处代码不成功http://jsfiddle.net/KkWdN/)
考虑到这个json不能改变,我上面的代码是否有任何错误,或者有其他任何技术来获得结果?
我只是学会使用javascript和json一个月,所以非常感谢你回答一个例子。
- 编辑:我将[。。length更改为json.length,现在我正在寻找访问网址的答案
答案 0 :(得分:1)
这就像是:
$.getJSON("http://go-gadget.googlecode.com/svn/trunk/test.json", function(json) {
for (var i = 0; i < json.length; i++) {
var map = json[i].propertyMap;
var content = map.content;
var user = map.user;
var date = map.date;
$('#date').text(date);
$('#nohp').text(user);
$('#content').text(content);
}
});
但请求失败,因为请求的资源上没有“Access-Control-Allow-Origin”标头,因此您被相同的来源政策停止强>
答案 1 :(得分:1)
您认为 [] .length; 会评估为。
它是0 ,所以它永远不会进入for循环。
除此之外,您的代码看起来还不错。
将for循环替换为
$.getJSON(url, function (json) {
for (var i = 0; i < json.length; i = i + 1) {
此外,您似乎正在访问API作为不同域的一部分。 因此,如果要从其他域检索数据,则需要使用 CORS 或 JSONP 来实现此功能。
答案 2 :(得分:0)
变化:
for (var i = 0; i < [].length; i = i + 1) {
到
for (var i = 0; i < json.length; i = i + 1) {
答案 3 :(得分:0)
如何使用以下内容 在你的情况下,说对象是myObj,我会得到像这样的值
var content = fetchValue(myObj, [0, "propertyMap", "content"], "");
var date = fetchValue(myObj, [0, "propertyMap", "date"], new Date());
var user = fetchValue(myObj, [0, "propertyMap", "user"], "");
只是为了确保我们发送一个默认值,以防我们没有获得所需的ojbect。这种方法的优点在于,现在您不必担心嵌套在结构中的数组或对象。 fetchValue函数可能如下所示。
function fetchValue(object, propertyChain, defaultValue){
var returnValue;
try{
returnValue = object;
forEach(propertyChain, function(element){
returnValue = returnValue[element];
});
}catch(err){
return defaultValue;
}
if(returnValue == undefined) {
returnValue = defaultValue;
}
return returnValue;
}
添加forEach功能
function forEach(array, action){
for(var x in array)
action(array[x]);
}