【问题标题】:JSon Parsing not workingJSON解析不起作用
【发布时间】:2014-01-21 18:57:27
【问题描述】:

我正在尝试解析来自 flixter API 的 JSON 数据以将其导入我的博客。 在下面的示例中,我尝试使用 JavaScript 输出电影消耗品的演员信息。

我的全部目标是让它输出信息 “西尔维斯特史泰龙饰演巴尼罗斯,杰森斯坦森饰演李圣诞节”等等。

这是我的 jsFiddle http://jsfiddle.net/k3V9p/3/

     var jsontext = '{
    "cast": [{
        "id": "162664630",
        "name": "Sylvester Stallone",
        "characters": ["Barney Ross"]
    }, {
        "id": "162653720",
        "name": "Jason Statham",
        "characters": ["Lee Christmas"]
    }, {
        "id": "162652223",
        "name": "Jet Li",
        "characters": ["Yin Yang"]
    }, {
        "id": "162664307",
        "name": "Dolph Lundgren",
        "characters": ["Gunnar Jensen"]
    }, {
        "id": "162670654",
        "name": "Chuck Norris",
        "characters": ["Booker"]
    }, {
        "id": "326392465",
        "name": "Terry Crews",
        "characters": ["Hale Caesar"]
    }, {
        "id": "770731413",
        "name": "Randy Couture",
        "characters": ["Toll Road"]
    }, {
        "id": "770833479",
        "name": "Liam Hemsworth",
        "characters": ["Billy the Kid"]
    }, {
        "id": "770704326",
        "name": "Scott Adkins",
        "characters": ["Hector"]
    }, {
        "id": "770670020",
        "name": "Nan Yu",
        "characters": ["Maggie"]
    }, {
        "id": "162670708",
        "name": "Jean-Claude Van Damme",
        "characters": ["Jean Vilain"]
    }, {
        "id": "162652509",
        "name": "Bruce Willis",
        "characters": ["Mr. Church"]
    }, {
        "id": "162662233",
        "name": "Arnold Schwarzenegger",
        "characters": ["Trench"]
    }, {
        "id": "489251774",
        "name": "Amanda Ooms",
        "characters": ["Pilar"]
    }, {
        "id": "377608335",
        "name": "Charisma Carpenter",
        "characters": ["Lacy"]
    }, {
        "id": "771417014",
        "name": "Nikolette Noel",
        "characters": ["Sophia"]
    }],
    "links": {
        "rel": "http://api.rottentomatoes.com/api/public/v1.0/movies/771238417.json"
    }
}';
    var titles = JSON.parse(jsontext);
    document.write(titles.cast);

【问题讨论】:

    标签: javascript json parsing


    【解决方案1】:

    您遇到的问题是字符串文字中的行尾。你可以这样写:

    var jsontext = '{\
      "cast": [{\
    

    但在您的情况下,不清楚您是否真的需要 JSON,因为您可以直接将对象创建为

    var titles = {
       cast": [{
       ...
    

    【讨论】:

    • 只有在收到来自textarea 值或来自 AJAX 响应的字符串时,才需要调用 JSON.parse。否则,您可以利用 JSON 只是普通的 JavaScript 对象表示法这一事实
    • @dystroy 感谢您的快速回复,但是如果我理解正确,我将不得不编辑从 api 服务(flixter)获得的 json 数据?如果没有,您可以编辑 jsFiddl 以便我可以看到它的实际效果?
    • @Craig 不,当您从服务器收到 JSON 时,行尾没有任何问题。您之所以会遇到这个问题,是因为您在脚本中使用了 JavaScript 字符串文字。
    【解决方案2】:

    我会说你遇到的第一个问题是 JSON.parsing(dystroy 已经完美解决了这个问题),在解决了你必须处理渲染之后,你可以这样做:(demo)

    var titles = {
        "cast": [{
            "id": "162664630", "name": "Sylvester Stallone", "characters": ["Barney Ross"]
        }, {"id": "162653720", "name": "Jason Statham", "characters": ["Lee Christmas"]
        }, {"id": "162652223", "name": "Jet Li", "characters": ["Yin Yang"]
        }, {"id": "162664307", "name": "Dolph Lundgren", "characters": ["Gunnar Jensen"]
        }, {"id": "162670654", "name": "Chuck Norris", "characters": ["Booker"]
        }, {"id": "326392465", "name": "Terry Crews", "characters": ["Hale Caesar"]
        }, {"id": "770731413", "name": "Randy Couture", "characters": ["Toll Road"]
        }, {"id": "770833479", "name": "Liam Hemsworth", "characters": ["Billy the Kid"]
        }, {"id": "770704326", "name": "Scott Adkins", "characters": ["Hector"]
        }, {"id": "770670020", "name": "Nan Yu", "characters": ["Maggie"]
        }, {"id": "162670708", "name": "Jean-Claude Van Damme", "characters": ["Jean Vilain"]
        }, {"id": "162652509", "name": "Bruce Willis", "characters": ["Mr. Church"]
        }, {"id": "162662233", "name": "Arnold Schwarzenegger", "characters": ["Trench"]
        }, {"id": "489251774", "name": "Amanda Ooms", "characters": ["Pilar"]
        }, {"id": "377608335", "name": "Charisma Carpenter", "characters": ["Lacy"]
        }, {"id": "771417014", "name": "Nikolette Noel", "characters": ["Sophia"]
        }],
            "links": {
            "rel": "http://api.rottentomatoes.com/api/public/v1.0/movies/771238417.json"
        }
    },
    star,
    staring = [];
    
    for (star = 0; star < titles.cast.length; star++) {
        staring.push(titles.cast[star].name + ' as ' + titles.cast[star].characters[0]);
    }
    
    document.getElementById('Credits').innerHTML = staring.join(', ');
    

    【讨论】:

    • 谢谢你的例子,非常感谢!
    【解决方案3】:

    您无需更改 flixster api 返回给您的内容。

    问题是你需要直接调用API...不要复制粘贴结果。

    在这里查看用法http://developer.rottentomatoes.com/docs/read/json/v10/examples

    只需执行 Ajax 调用和 onSuccess(示例中为 searchCallback),您就已经将数据解析为 json。

    【讨论】:

    • 谢谢,我着急没看到这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多