Ruby on rails 如何检查ruby中是否存在JSON密钥

Ruby on rails 如何检查ruby中是否存在JSON密钥,ruby-on-rails,ruby,Ruby On Rails,Ruby,我们有一个JSON对象,比如 { "field1": { "display": "abc", "value": "def" }, "field2": { "display": "abc2" }, "field3": { &q

我们有一个JSON对象,比如

{
"field1": {
        "display": "abc",
        "value": "def"
    },
    "field2": {
        "display": "abc2"
    },
    "field3": {
        "display": "abc3",
        "value": "def1"
    }
}
我只想在值键存在时存储值,如果值键不存在,则保留为空字符串

我正在尝试这个,但它失败了,因为field2没有一个值键,我不知道如何才能实现这一点

@sampleJsonObject['field2']['value'] ?  @sampleJsonObject['field2']['value'] : ""

如何实现这一点?

您需要使用


我建议使用ruby的哈希来操作对象数据:

hashy={
“字段1”:{
“显示”:“abc”,
“值”:“def”
},
“字段2”:{
“显示”:“abc2”
},
“字段3”:{
“显示”:“abc3”,
“值”:“def1”
}
}
或者如果是json字符串:

hashy=JSON.parse({“field1”:{“display”:“abc”,“value”:“def”},“field2”:{“display”:“abc2”},“field3”:{“display”:“abc3”,“value”:“def1”}})
您可以在irb中尝试:

h[:field2][:value]?'值存在“:“值不存在并返回nil”
它将返回
“值不存在,返回nil”

您可以使用空值设置
键,询问该值是否为零:

hashy[:field2][:value] = '' if hashy[:field2][:value].nil?
# or
hashy[:field2][:value] = '' unless hashy[:field2].has_key?(:value)
那么您的哈希将是:

{:field1=>{:display=>“abc”,:value=>“def”},:field2=>{:display=>“abc2”,:value=>“},:field3=>{:display=>“abc3”,:value=>“def1”}
您可以将结果哈希解析为JSON

#需要“json”#别忘了需要json
需要“json”
JSON.generate(hashy)
#或
h、 到u json
#=>“{\'field1\\”:{\'display\':\'abc\',\'value\':\'def\',\'field2\':{\'display\':\'abc2\',\'value\':\'field3\':{\'display\':'abc3\','value\':'def1\'}”

key在您的语句中是什么意思
@sampleJsonObject[key['field2']]['value'])
?您在那里发布了一个散列。如果您使用的是散列,您可以只使用
obj.key?(key\u to\u check)
,如果密钥存在,它将返回true或false。它工作正常,在我开始使用它时返回null。它有散列,感谢所有人的帮助:)我不清楚您的问题,因为您的问题中没有JSON。什么是
@sampleJsonObject
@locations\u to\u map
?@spickermann对所有的混乱表示抱歉,我们已经编辑了它,诀窍是使用散列
hashy[:field2][:value] = '' if hashy[:field2][:value].nil?
# or
hashy[:field2][:value] = '' unless hashy[:field2].has_key?(:value)