【问题标题】:Facebook query result is string of hashesFacebook 查询结果是哈希字符串
【发布时间】:2016-04-01 00:08:41
【问题描述】:

我正在使用 koala gem 查询 Facebook。 以下查询产生一个字符串?的哈希值。例如:

@graph.get_object("search?q=holden&type=page&limit=5")

当我说哈希字符串时,结果看起来像这样:

{"name"=>"Holden", "category"=>"Cars", "id"=>"5730024897"}
{"name"=>"Holden, Massachusetts", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"104015212968818"}
{"name"=>"Holden, Maine", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"112517345426169"}
{"name"=>"Holden, Missouri", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"107921245894576"}
{"name"=>"Holden, Louisiana", "category"=>"City", "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}], "id"=>"111960155481686"}

哈希之间没有逗号,当然,有些值本身就是哈希。

尝试按原样执行JSON.parse 会产生 JSON 错误,因为它不是格式正确的 JSON。 所以我想我可以通过跟踪打开和关闭大括号来解析这个,但是在我重新发明轮子之前,可能是一个笨重的轮子,我想知道是否有一些很酷的 ruby​​ 方法可以做到这一点。我可以以某种方式咀嚼哈希吗?还是……?

期待眼花缭乱!

【问题讨论】:

  • 你能发布它返回的确切的“哈希字符串”吗?
  • @Juan Manuel Rodulfo Salcedo - 我编辑了问题以显示一些真实的 FB 输出。但是,我并不是真的想以蛮力的方式阅读这篇文章,因为它并不难。如果有一个聪明的 Ruby one-liner,我真的只是在徘徊吗?
  • API 确实返回了有效的 JSON(您可以通过直接在浏览器中调用 https://graph.facebook.com/search?q=holden&type=page&limit=5&access_token={add_a_valid_token_here} 轻松确认。您使用的方法的名称是 get_object - 所以我假设它确实已经返回了一个对象;意思是某种红宝石数据结构。您可能只是被用于制作该调试输出的任何方法所愚弄(?)

标签: ruby json facebook hash


【解决方案1】:

我不知道以一种奇特的方式进行如此多的转换的更好方法..

如果你的字符串和我从代码中复制的一样:

[68] pry(main)> string
=> "{\"name\"=>\"Holden\", \"category\"=>\"Cars\", \"id\"=>\"5730024897\"}\n{\"name\"=>\"Holden, Massachusetts\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"104015212968818\"}\n{\"name\"=>\"Holden, Maine\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"112517345426169\"}\n{\"name\"=>\"Holden, Missouri\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"107921245894576\"}\n{\"name\"=>\"Holden, Louisiana\", \"category\"=>\"City\", \"category_list\"=>[{\"id\"=>\"224455390913969\", \"name\"=>\"City\"}], \"id\"=>\"111960155481686\"}"

[69] pry(main)> string.split("\n").map { |a| JSON.parse(a.gsub("=>",":")) }
=> [{"name"=>"Holden", "category"=>"Cars", "id"=>"5730024897"},
 {"name"=>"Holden, Massachusetts",
  "category"=>"City",
  "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}],
  "id"=>"104015212968818"},
 {"name"=>"Holden, Maine",
  "category"=>"City",
  "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}],
  "id"=>"112517345426169"},
 {"name"=>"Holden, Missouri",
  "category"=>"City",
  "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}],
  "id"=>"107921245894576"},
 {"name"=>"Holden, Louisiana",
  "category"=>"City",
  "category_list"=>[{"id"=>"224455390913969", "name"=>"City"}],
  "id"=>"111960155481686"}]

如果都在同一个字符串行(不带“\n”)

string.gsub('}{','},,{').split(",,").map { |a| JSON.parse(a.gsub("=>",":")) }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-08-08
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多