【问题标题】:JSON string parsing for ordered pairs in rubyruby中有序对的JSON字符串解析
【发布时间】:2017-03-30 04:03:43
【问题描述】:

这是我的 JSON

  "status": "ok",
  "name": "blah",
  "unit": "blahblah",
  "period": "bluh",
  "description": "Average blah across major blahs.",
  "values": [
    {
      "x": 1459382400,
      "y": 416.94
    },
    {
      "x": 1459468800,
      "y": 416.25
    },

我想知道是否有办法将每个 'y' 减去随后的 'y' 值变成一个自变量。

Simplified expression of code
conn = Net::HTTP.get URI('http://www.blah.blahblah/bluhblahbleh')
parsed = JSON.parse(conn)
puts parsed ["values"]  # this prints all ordered pairs child to "values"
#This wouldn't work for me
puts parsed["values"]["y"]
#no luck here either
puts parsed["values", "y"]

我应该使用.each do |line| 方法吗? # 一行一行?

任何指导、智慧或无意义的谈话都是有价值的。

【问题讨论】:

  • parsed["values"].map { |e| e["y"] }.reduce(:-)
  • 你们是伟大的人类

标签: json ruby parsing


【解决方案1】:

我认为这适用于您想做的事情

require 'json'

json = '{"status": "ok", "name": "blah", "unit": "blahblah", "period": "bluh", "description": "Average blah across major blahs.", "values": [ { "x": 1459382400, "y": 416.94 }, { "x": 1459468800, "y": 416.25 }, { "x": 1459468800, "y": 417.25 }]}'
data = JSON.parse(json)

values_with_change = [data['values'][0]]

data['values'].each_cons(2) do |value|
  change = value[1]['y'] - value[0]['y']
  value_with_change = value[1].merge({change: change})
  values_with_change.push(value_with_change)
end

values_with_change

输出

 => [{"x"=>1459382400, "y"=>416.94, :change=>0.0}, {"x"=>1459468800, "y"=>416.25, :change=>-0.6899999999999977}, {"x"=>1459468800, "y"=>417.25, :change=>1.0}] 

【讨论】:

  • 使用Enumerable#each_cons,不要发明轮子。
  • data['values'].each_cons(2) do |(v1, v2)| ...
  • 我如何找到所有的总和:change
猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多