【问题标题】:Parse text/json data in Ruby在 Ruby 中解析文本/json 数据
【发布时间】:2013-07-10 12:55:33
【问题描述】:

我正在收集 HTTP 响应,它以 text/json 形式返回。原格式如下:

{"param" => "value", "interesting_param" => [{"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5},
{"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}]}

当我执行 JSON.parse(response.body)["interesting_param"] 时,我可以检索到这个输出:

{"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5},
{"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}

我如何才能从上面的完整结果集中仅捕获以下内容。

`parama1-vala1`, `parama2-vala2` and `parama5-vala5`
`paramb1-valb1`, `paramb2-valb2` and `paramb5-valb5`

更新 我确实对此进行了进一步的尝试,现在我正在考虑使用循环。 我尝试这样做的方式是:

  1. 查找记录计数,例如,如果:

测试 = {"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5}, {"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}

那么,test.count 将是 2

现在,如果我能以某种方式使用循环遍历 test 中的元素,那么我或许能够捕获特定元素。

谢谢。

【问题讨论】:

  • 你能发布确切的值吗?您的语法在示例代码中无效。也是您想要的确切输出格式。
  • @Dogbert 这里的语法怎么无效?我只清理了真实数据。就是这样。
  • 你可能打算在 5 行数据之前有一个 [] .. ?
  • 好的。原始数据是 { "p" => 'v", ..., "interesting_param" => [{""}]}。出原始数据,我取出了有趣的参数 - 值对。问题对应于这组特定的数据。希望这是有道理的。
  • 好的,您希望问题中数据的确切输出是什么?

标签: ruby json parsing


【解决方案1】:

您似乎希望将每个哈希映射到一个字符串列表,该列表通过将键的字符串版本与值的字符串版本连接起来,并用“-”连接。

JSON.parse(response.body)["interesting_param"]

上面的代码应该给你一个红宝石哈希列表。

interesting_bits = JSON.parse(response.body)["interesting_param"]
result = interesting_bits.map{|bit| bit.map{|k,v| "#{k}-#{v}"}}

类似的东西应该可以解决问题。

puts result.inspect
#prints 
# [ ["parama1-vala1","parama2-vala2","parama3-vala3","parama4-vala4","parama5-vala5"] , ["paramb1-valb1","paramb2-valb2","paramb3-valb3","paramb4-valb4","paramb5-valb5"] ]

我不明白您使用什么标准,然后将其过滤为仅 1,2 和 5...但这也很容易做到。在将它们转换为字符串列表之前,我会对散列执行此操作。

【讨论】:

  • 谢谢奈杰尔。我使用了第一部分 - JSON.parse(response.body)["myvar"]。但现在由于某种原因,我收到错误消息:JSON::ParserError: 757: unexpected token at ''。知道为什么它停止工作..?
  • 因为您的 JSON 格式不再正确。制作 JSON 的代码发生了一些变化。你的问题真的不清楚。这段代码的上下文是什么?听起来你需要重新学习基本的 Ruby,ruby-doc.org/core-2.0.0/Hash.htmlruby-doc.org/core-2.0.0/Array.html 应该会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多