0

我在 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\"]}"

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

4

3 回答 3

4

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

一个更简单的例子:

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

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

require 'json'
JSON.generate(:id => @var, :observation => { :key => "blah blah", :value => ["something"] })
于 2013-09-26T22:46:12.253 回答
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"]}]}

在处理未知结构和对象时,可能会发生许多特殊的事情,而插值到字符串中将无法涵盖。您应该利用预先构建的轮子,而不是试图发明或规避使用它们。

于 2013-09-26T23:01:05.020 回答
-1

在沮丧了无数分钟后叹了口气,我发现解决方案是:

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

当事情如此简单时,我讨厌它。

于 2013-09-26T22:47:32.543 回答