0

我一直在努力解决 Ruby on Rails 中的一些问题。

我有四个相互关联的表:ABCDA是 和 的父级 是和BB父级。CD

我有一个记录已经存在于表中B,并希望针对该 ID 在“C”和“D”表中针对特定记录添加多个条目,例如“3”。

数据格式为:

[{\"waypoint\":{\"latitude\":37.3645616666667,\"timestamp\":\"2012-10-16T09:58:50Z\",\"background\":false,\"estimated_speed\":17.4189262390137,\"journey_id\":null,\"longitude\":-112.850676666667}},{\"waypoint\":{\"latitude\":37.3648733333333,\"timestamp\":\"2012-10-16T09:58:54Z\",\"background\":false,\"estimated_speed\":17.076057434082,\"journey_id\":null,\"longitude\":-112.85077}},{\"waypoint\":{\"latitude\":37.3651116666667,\"timestamp\":\"2012-10-16T09:58:57Z\",\"background\":false,\"estimated_speed\":15.4269437789917,\"journey_id\":null,\"longitude\":-112.850766666667}},{\"waypoint\":{\"latitude\":37.36547,\"timestamp\":\"2012-10-16T09:59:02Z\",\"background\":false,\"estimated_speed\":17.1007328033447,\"journey_id\":null,\"longitude\":-112.85072}},{\"waypoint\":{\"latitude\":37.3658433333333,\"timestamp\":\"2012-10-16T09:59:11Z\",\"background\":false,\"estimated_speed\":10.3052024841309,\"journey_id\":null,\"longitude\":-112.850738333333}}]"   

我从 Web 服务中获取这些数据。但我认为journey_id它是空的,而我希望它是空的,3因为我想针对这个 id 进行输入。

如何使用此 ID 将此数据保存在子表中?

4

1 回答 1

1

您的 JSON 字符串在您的示例中未正确打开,因为它缺少前导'"'. 解决这个问题并继续前进,这就是 JSON 看起来像“美化”的样子:

[
  {
    “航点”: {
      “纬度”:37.3645616666667,
      "时间戳": "2012-10-16T09:58:50Z",
      “背景”:假,
      “估计速度”:17.4189262390137,
      “journey_id”:空,
      “经度”:-112.850676666667
    }
  },
  {
    “航点”: {
      “纬度”:37.3648733333333,
      "时间戳": "2012-10-16T09:58:54Z",
      “背景”:假,
      “估计速度”:17.076057434082,
      “journey_id”:空,
      “经度”:-112.85077
    }
  },
  {
    “航点”: {
      “纬度”:37.3651116666667,
      "时间戳": "2012-10-16T09:58:57Z",
      “背景”:假,
      “估计速度”:15.4269437789917,
      “journey_id”:空,
      “经度”:-112.850766666667
    }
  },
  {
    “航点”: {
      “纬度”:37.36547,
      "时间戳": "2012-10-16T09:59:02Z",
      “背景”:假,
      “估计速度”:17.1007328033447,
      “journey_id”:空,
      “经度”:-112.85072
    }
  },
  {
    “航点”: {
      “纬度”:37.3658433333333,
      “时间戳”:“2012-10-16T09:59:11Z”,
      “背景”:假,
      “估计速度”:10.3052024841309,
      “journey_id”:空,
      “经度”:-112.850738333333
    }
  }
]

你有一个waypoint对象数组。将该 JSON 解析为 Ruby 对象:

obj = JSON["[{\"waypoint\":..."] # purposely truncated for brevity

返回一个哈希数组:

[{“航点”=>
   {"纬度"=>37.3645616666667,
    "时间戳"=>"2012-10-16T09:58:50Z",
    “背景”=>假,
    “估计速度”=>17.4189262390137,
    “journey_id”=>无,
    "经度"=>-112.850676666667}},
 {“航点”=>
   {“纬度”=>37.3648733333333,
    "时间戳"=>"2012-10-16T09:58:54Z",
    “背景”=>假,
    “估计速度”=>17.076057434082,
    “journey_id”=>无,
    "经度"=>-112.85077}},
 {“航点”=>
   {“纬度”=>37.3651116666667,
    "时间戳"=>"2012-10-16T09:58:57Z",
    “背景”=>假,
    “估计速度”=>15.4269437789917,
    “journey_id”=>无,
    "经度"=>-112.850766666667}},
 {“航点”=>
   {"纬度"=>37.36547,
    "时间戳"=>"2012-10-16T09:59:02Z",
    “背景”=>假,
    “估计速度”=>17.1007328033447,
    “journey_id”=>无,
    "经度"=>-112.85072}},
 {“航点”=>
   {“纬度”=>37.3658433333333,
    "时间戳"=>"2012-10-16T09:59:11Z",
    “背景”=>假,
    “估计速度”=>10.3052024841309,
    “journey_id”=>无,
    "经度"=>-112.850738333333}}]

您可以遍历该数组并访问或更改 的值journey_id

row = 3
obj = obj.map{ |h| h['waypoint']['journey_id'] = row }
obj.first

查看第一个哈希显示该值已更改,其余部分也是如此:

{
  "waypoint" => {
    "latitude" => 37.3645616666667,
    "timestamp" => "2012-10-16T09:58:50Z",
    "background" => false,
    "estimated_speed" => 17.4189262390137,
    "journey_id" => 3,
    "longitude" => -112.850676666667
  }
}

此时,您需要重新创建 JSON 字符串。您可以通过阅读JSON 文档了解这一点。

您可以通过直接修改接收到的字符串来完成所有这些操作,但您不想养成直接修改 JSON 字符串的习惯,因为您可能会无意中损坏有效负载。最好让解析器给你结构,修改它,然后让 JSON 重新创建字符串。

如何将其存储到数据库中也留给您练习。

于 2013-04-05T16:05:17.290 回答