【问题标题】:Parsing Json using Javascript to retrieve specific values使用 Javascript 解析 Json 以检索特定值
【发布时间】:2013-11-27 00:10:27
【问题描述】:

如何以 JSON 格式解析来自该 url 的内容?

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=RoboCop_(2014_film)&rvsection=0

我正在尝试使用我在下面找到的这段代码来解析这个 json url,但是它不起作用。

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

这是我在 JS Fiddle 上的内容 http://jsfiddle.net/94Vyf/

如果我没记错的话,这应该会弹出一个包含某种信息的窗口。

基本上我正在尝试通过维基百科的 api 获取电影的演员表。

我缩小了结果的范围,但是我似乎无法找到一种方法来仅从数据中获取星标值。

请帮助这个新手。

谢谢/

【问题讨论】:

  • 我用它来更快地获取信息

标签: javascript jquery json parsing wikipedia-api


【解决方案1】:

由于是跨域请求,您需要使用jsonp - 网址末尾的callback=?

$.getJSON('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=RoboCop_(2014_film)&rvsection=0&callback=?', function (json) {
    console.log(json);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

演示:Fiddle - 查看浏览器控制台以查看日志记录语句,不要将警报用于调试目的

同样在小提琴中你没有包含 jQuery

【讨论】:

    【解决方案2】:

    DEMO

    您对 URL 内容不太正确,但您可以随意更改。

    var url = "http://en.wikipedia.org/w/api.php?action=mobileview&format=json&page=RoboCop_(2014_film)&redirect=no&sections=all&prop=text&sectionprop=level&noimages=&noheadings=&callback=?";
    
    
    jQuery.getJSON(
        url,
        function (data){ 
          var t = data.mobileview.sections[2].text, out = [];
          t = t.replace(/<a[^>]+>([^<]+)<\/a>/igm,"$1");
    
          var m = t.match(/(?:<li>)([a-zA-Z ]+) as ([a-zA-Z ]+)(?:,)/img);
          m.forEach(function (s){
            out.push(s.replace(/(?:<li>)([a-zA-Z ]+) as ([a-zA-Z ]+)(?:,)/i, "$1 = $2"));
          });
          console.log(out);// this is result, but you have to modify it as your taste
        }
    );
    

    输出:

    ["Joel Kinnaman = Alex Murphy", "Michael Keaton = Raymond Sellars", "Abbie Cornish = Clara Murphy", "Jackie Earle Haley = Maddox", "Michael Kenneth Williams = Officer Jack Lewis", "Jennifer Ehle = Liz Kline", "Jay Baruchel = Tom Pope", "Aimee Garcia = Kim", "John Paul Ruttan = David Murphy", "Douglas Urbanski = Mayor Durant"]
    

    重要提示!

    此代码不适用于其他维基百科页面,因为它依赖于 JSON 数据,在这种情况下,“演员”部分有一个索引 2。另一个“电影”页面可能具有不同的结构,具体取决于作者。

    【讨论】:

    • 你好鲁本,有没有办法解决这个问题?我正在寻找一种自动化的方式来处理其他页面/电影
    • 当然不是,没有通用的方法。这完全是网站上的人工输入,因此 - 不可预测的页面组合。但可能是imdb.com 结构更好? Cast 部分中有ID = "titleCast"...
    • 我明白你所说的关于基于人类提交的随机输入的内容。但是,在非移动版本中,页面本身存在一个常量。例如,Robocop 链接与其他电影提交完美对齐,因此为什么我问我是否可以这样做......我也不能用正则表达式解析 json 数据吗?在每部电影的数据中,我都遇到了同一行,说明“starring = {{Plainlist |\n*[[Joel Kinnaman]]\n*[[Gary Oldman]]\n*[[Michael Keaton]]\n* [[塞缪尔·杰克逊]]\n}}\n|"演员姓名当然不同
    • 我对正则表达式并不完全了解,但如果有一个恒定的模式,例如星号 =“”,它不会起作用吗?
    • 亲爱的克雷格。你应该给正则表达式一个拥抱。这是解析本世纪地球上所有事物的唯一方法。实际上,您可以识别任何可以预测的输入。问题只是您必须编写的代码量。我回答了你特定的问题,但这只是你要解决的一个巨大问题中的一个问题。
    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多