【问题标题】:Parsing a JSON feed from YQL using jQuery使用 jQuery 从 YQL 解析 JSON 提要
【发布时间】:2010-05-18 13:50:07
【问题描述】:

我正在使用 YQL 的 query.multi 来获取多个提要,因此我可以使用 jQuery 解析单个 JSON 提要并减少我正在建立的连接数量。为了解析单个提要,我需要能够检查结果的类型(照片、项目、条目等),以便我可以以特定方式提取项目。由于项目嵌套在 JSON 提要中的方式,我不确定循环遍历结果并检查类型然后循环遍历项目以显示它们的最佳方式。

这是一个 YQL (http://developer.yahoo.com/yql/console/) query.multi 示例,您可以看到三种不同的结果类型(条目、照片和项目)以及嵌套在其中的项目:

select * from query.multi where queries=
    "select * from twitter.user.timeline where id='twitter';  
     select * from flickr.photos.search where has_geo='true' and text='san francisco';
     select * from delicious.feeds.popular"

或者这里是 JSON 提要本身:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20query.multi%20where%20queries%3D%22select%20*%20from%20flickr.photos.search%20where%20user_id%3D'23433895%40N00'%3Bselect%20*%20from%20delicious.feeds%20where%20username%3D'keith.muth'%3Bselect%20*%20from%20twitter.user.timeline%20where%20id%3D'keithmuth'%22&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=

我正在使用 jQuery 的 $.getJSON 方法

【问题讨论】:

    标签: javascript jquery json jql


    【解决方案1】:

    您无需手动解析 JSON。这就是 JSON 的意义所在。使用JSON.parse(yourJSONstring) 将其转换为Javascript 对象。

    编辑:实际上我不确定浏览器是否支持该浏览器。这是jQuery的方式:

    http://api.jquery.com/jQuery.parseJSON/

    编辑2:

    var results = feedObj.query.results.results
    for (var i = 0; i < results.length; i++) {
      if (results[i].photo) {
        // do something with photos
      } else if (results[i].item) {
        // do something with items
      } else {
        // do something with entry
      }
    }
    

    测试results[i].photo 对象是否存在。如果存在,则结果是一个数组,您可以循环并对其执行操作。

    【讨论】:

    • 我实际上是在使用 jQuery 的 $.getJSON 解析提要。如果您查看提要,则有三组结果,因为 YQL 正在查询多个表。您将如何遍历提要并检查组,然后使用 jQuery 显示结果?那是我需要手写的东西,因为结果需要以不同的方式显示。
    • 我很抱歉不理解。使用github.com/jamespadolsey/prettyPrint.js 之类的东西打印出您可以阅读的显示。然后您应该能够弄清楚如何钻取 Javascript 对象以获取所需的值。
    • YQL 的控制台在“格式化视图”和“树视图”中都提供了 JSON 提要的良好视图,我知道如何正常下钻 JSON 提要。我的问题是 query.multi 表生成的提要以及它如何对 JSON 提要中的项目进行分组。
    • 我使用您的 JSON 提要创建了一个简单的测试,用于将类型分隔为数组。 feedObj 是传递给 $.getJSON 回调的内容。
    • 这正是我需要的。谢谢弗莱彻!
    猜你喜欢
    • 2011-08-18
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2013-03-27
    • 2011-02-04
    • 2015-10-23
    相关资源
    最近更新 更多