如何在Ruby中检查JSON键是否存在

5
我们有一个类似如下的JSON对象:
{
"field1": {
        "display": "abc",
        "value": "def"
    },
    "field2": {
        "display": "abc2"
    },
    "field3": {
        "display": "abc3",
        "value": "def1"
    }
}

只有在value键存在时,我才希望存储值,并且如果value键不存在,则保持为空字符串。

例如:我正在尝试这样做,但是它失败了,因为field2没有一个value键,不确定如何实现这一点。

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

我该如何实现这个目标?


你的语句中 key 是什么意思,例如 @sampleJsonObject[key['field2']]['value']) - Ninh Le
2
你在那里发布了一个哈希。如果你正在使用哈希,你可以直接使用 obj.key?(key_to_check),它会返回 true 或 false,如果键存在的话。 - benjessop
是的,它正常工作了。当我开始将其用作哈希时,它返回了空值。非常感谢大家的帮助 :) - supreet singh
你的问题对我来说不太清楚,因为你的问题中没有JSON。@sampleJsonObject@locations_to_map是什么? - spickermann
@spickermann 对于所有的混淆表示抱歉,已经进行了编辑,诀窍是使用哈希。 - supreet singh
也许你可以尝试像下面这样做:@sampleJsonObject.each_key{|key| p @sampleJsonObject[key].key?(:value) ? @sampleJsonObject[key][:value] : '' } - Syed Samiuzzaman
2个回答

3
我建议使用Ruby哈希表来操作对象数据:
hashy = {
  "field1": {
    "display": 'abc',
    "value": 'def'
  },
  "field2": {
    "display": 'abc2'
  },
  "field3": {
    "display": 'abc3',
    "value": 'def1'
  }
}

或者如果它是一个 JSON 字符串:

hashy = JSON.parse('{"field1": {"display": "abc","value": "def"},"field2": {"display": "abc2"},"field3": {"display": "abc3","value": "def1"}}')

您可以在irb中尝试以下操作:
h[:field2][:value] ? 'value exists' : 'value don\'t exist and returns nil'

它会返回"值不存在且返回nil"

您可以将value键设置为空值,然后询问该值是否为零:

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格式

# require 'json' # Don't forget to require json
require 'json'

JSON.generate(hashy)
# or
h.to_json

# => "{\"field1\":{\"display\":\"abc\",\"value\":\"def\"},\"field2\":{\"display\":\"abc2\",\"value\":\"\"},\"field3\":{\"display\":\"abc3\",\"value\":\"def1\"}}"


2
你需要使用json将其转换为哈希表,参考json文档
[21] pry(main)> require 'json'
=> false
[22] pry(main)> @sampleJsonObject = '{"field1": { "display": "abc", "value": "def"  }, "field2": { "display": "abc2"}, "field3": {"display": "abc3","value": "def1"}}'
=> "{\"field1\": { \"display\": \"abc\", \"value\": \"def\"  }, \"field2\": { \"display\": \"abc2\"}, \"field3\": {\"display\": \"abc3\",\"value\": \"def1\"}}"
[23] pry(main)> @JsonToHashObject = JSON.parse(@sampleJsonObject)
=> {"field1"=>{"display"=>"abc", "value"=>"def"}, "field2"=>{"display"=>"abc2"}, "field3"=>{"display"=>"abc3", "value"=>"def1"}}
[24] pry(main)> @JsonToHashObject['field1']['value']
=> "def"
[25] pry(main)> @JsonToHashObject['field2']['value']
=> nil
[26] pry(main)> @JsonToHashObject['field2']['display']
=> "abc2"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接