检索未命名的json数组url中的值

时间:2013-12-12 18:31:51

标签: javascript jquery json

我正在努力在这个网址中的json上检索一些值:

  

http://go-gadget.googlecode.com/svn/trunk/test.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,现在我正在寻找访问网址的答案

4 个答案:

答案 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) {

DEMO here.

答案 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]);
}