如何在JSON对象中连接?

时间:2013-09-26 22:44:05

标签: ruby json

我在Ruby中创建了一个变量:

@var = 5

现在我想在这个对象中使用该变量:

@json = '{"id":0,"observation": [{"key": "BLAH_BLAH","value": ["SOMETHING"]}'

类似的东西:

@json = '{"id":#{@var},"observation": [{"key": "BLAH_BLAH","value": ["SOMETHING"]}'

当我从对象中删除双引号并用单引号替换它们然后用双引号包装JSON对象时,我收到一个解析错误。当我试图用\转义引号时,我也得到一个解析错误:

@json = "{\"id\":\"#{@var}\",\"observation\": [{\"key\": \"BLAH_BLAH\",\"value\": [\"SOMETHING\"]}"

可能还有另一种方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为您使用单引号来构建JSON字符串,而在Ruby中的单引号内部,插值不会发生。

一个更简单的例子:

a = 1
puts '#{a}'
puts "#{a}"

我真的建议使用库来构建您的JSON,例如Ruby中的内置JSON模块。

require 'json'
JSON.generate(:id => @var, :observation => { :key => "blah blah", :value => ["something"] })

答案 1 :(得分:0)

使用JSON类来操作JSON字符串:

require 'json'

json = '{"id":0,"observation":[{"key":"BLAH_BLAH","value":["SOMETHING"]}]}'

foo = JSON[json]  # => {"id"=>0, "observation"=>[{"key"=>"BLAH_BLAH", "value"=>["SOMETHING"]}]}
foo['id'] = 5
puts JSON[foo]

# >> {"id":5,"observation":[{"key":"BLAH_BLAH","value":["SOMETHING"]}]}

处理未知结构和对象时可能会发生许多特殊事情,插入字符串不会覆盖。你应该利用预制的轮子而不是试图发明或绕过它们。

答案 2 :(得分:-1)

叹息在无数分钟沮丧之后我找到了解决方案:

"{\"id\":#{@u_id},\"observation\": [{\"key\": \"ACCOUNT_CLOSED\",\"value\": [\"N\"]}

我讨厌这么简单。