正在 JSON 中解析 Ruby 中的多个页面
Parsing JSON with multiple pages in Ruby
我明白如何解析JSON,但如果它包含link到其他页面,我不知道如何解析。
非常感谢您的帮助!
api.example.com/v0/accounts
第一次请求 JSON 文件时,我们得到:
{
"response": "OK",
"nfts": [
{
"token_id": "35507806371588763669298464310896317145981867843055556101069010709538683224114"
}
],
"total": null,
"continuation": "1634866413000"
}
有一行:continuation,这是对下一个请求的link,所以它会重复很多次。
在下一个请求中,link 更改为 api.example。com/v0/accounts&continuation=1634866413000
我的代码现在看起来像这样:
class Source
include Mongoid::Document
include Mongoid::Timestamps
require 'json'
after_save :add_items
def add_items
json= HTTParty.get("https://api.example.com/v0/accounts")
json.dig('nfts')
load_items_ethereum.each do |item|
Item.create!(
:token_id => item['token_id'],
)
end
end
end
像 HTTParty 这样的低级 HTTP 客户端通常不处理迭代。你需要自己做,使用循环直到没有连续字段,例如:
begin
continuation_param = "?continuation=#{continuation_id}" if continuation_id
json = HTTParty.get("https://api.example.com/v0/accounts#{continuation_param}")
continuation_id = json.dig('continuation');
# process latest payload, append it to a running list, etc.
end while continuation_id
(对于生产,最佳做法是保留一个计数器,以便您可以在 N 次迭代后退出,以避免无限循环。)
我明白如何解析JSON,但如果它包含link到其他页面,我不知道如何解析。
非常感谢您的帮助!
api.example.com/v0/accounts
第一次请求 JSON 文件时,我们得到:
{
"response": "OK",
"nfts": [
{
"token_id": "35507806371588763669298464310896317145981867843055556101069010709538683224114"
}
],
"total": null,
"continuation": "1634866413000"
}
有一行:continuation,这是对下一个请求的link,所以它会重复很多次。
在下一个请求中,link 更改为 api.example。com/v0/accounts&continuation=1634866413000
我的代码现在看起来像这样:
class Source
include Mongoid::Document
include Mongoid::Timestamps
require 'json'
after_save :add_items
def add_items
json= HTTParty.get("https://api.example.com/v0/accounts")
json.dig('nfts')
load_items_ethereum.each do |item|
Item.create!(
:token_id => item['token_id'],
)
end
end
end
像 HTTParty 这样的低级 HTTP 客户端通常不处理迭代。你需要自己做,使用循环直到没有连续字段,例如:
begin
continuation_param = "?continuation=#{continuation_id}" if continuation_id
json = HTTParty.get("https://api.example.com/v0/accounts#{continuation_param}")
continuation_id = json.dig('continuation');
# process latest payload, append it to a running list, etc.
end while continuation_id
(对于生产,最佳做法是保留一个计数器,以便您可以在 N 次迭代后退出,以避免无限循环。)