【问题标题】:How can I access an array of objects from GData JSON in Ruby?如何在 Ruby 中从 GData JSON 访问对象数组?
【发布时间】:2013-04-12 17:07:09
【问题描述】:

我正在尝试编写一个 Jekyll 扩展程序,它将嵌入来自 Blogger 博客的 cmets。
我能够以 JSON 格式获取 cmets 提要,并对其进行足够的处理以提取 cmets 的总数。但是,我还没有弄清楚如何处理提要中的每条评论。

json_url = "http://www.blogger.com/feeds/8505008/593465383646513269/comments/default/?alt=json"
json_rep = Net::HTTP.get_response(json_url)
json_rep = JSON.parse(json_rep.body)
json_rep['feed']['openSearch$totalResults']['$t'] # => "4"
json_rep['feed']['entry'].class # => Array

json_rep['feed']['entry'].length
# => Liquid Exception: undefined method `length' for nil:NilClass in post

这是我第一次用 Ruby 编写任何代码。我做错了什么?

这里是JSON I am trying to parse的相关部分。

{
  "feed": {
    "openSearch$totalResults": {
      "$t": "4"
    },
    "entry": [
      {
        "id": {
          "$t": "tag:blogger.com,1999:blog-8505008.post-491866073982779922"
        },
        "published": {
          "$t": "2013-01-08T15:23:47.322-04:00"
        },
        "content": {
          "type": "html",
          "$t": "Recently, my sister has updated it more than I have. \u00dcber-fail on my part. :p"
        }
      }
    ]
  }
}

【问题讨论】:

    标签: ruby json gdata jekyll liquid


    【解决方案1】:

    这是你应该做的事情:

    require 'rubygems'
    require 'json'
    require 'net/http'
    require 'net/https'
    require 'uri'
    
    url = "http://www.blogger.com/feeds/8505008/593465383646513269/comments/default/?alt=json"
    uri = URI.parse(url)
    http = Net::HTTP.new(uri.host, uri.port)
    request = Net::HTTP::Get.new(uri.request_uri)
    response = http.request(request)
    
    json_rep = JSON.parse(response.body)
    
    puts json_rep['feed']['openSearch$totalResults']['$t']
    
    entries = json_rep['feed']['entry']
    entries.each do |entry|
        puts entry["id"]["$t"]
        #add what ever code you like here
    end 
    

    这个输出:

    4
    tag:blogger.com,1999:blog-8505008.post-491866073982779922
    tag:blogger.com,1999:blog-8505008.post-4792479891671746788
    tag:blogger.com,1999:blog-8505008.post-4766604955439002209
    tag:blogger.com,1999:blog-8505008.post-5484003770204916000
    

    【讨论】:

    • entries.each 做 |entry| # => Liquid 异常:未定义方法 `each' for nil:NilClass in post
    • entry 当然 feed的孩子。
    • 原来如此,那么这将是第一种方式。如果您收到null 错误,则表示entry 变量中没有数据。
    • 你能发布整个 JSON 提要吗?我感觉我们所说的路径不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2021-11-20
    • 2011-07-07
    相关资源
    最近更新 更多