How to check if JSON key exists or not in ruby

Viewed 4277

We have a JSON object like

{
"field1": {
        "display": "abc",
        "value": "def"
    },
    "field2": {
        "display": "abc2"
    },
    "field3": {
        "display": "abc3",
        "value": "def1"
    }
}

I want to store value only if the value key exist and keep as empty string if value key is not existent

Eg. i am trying this , but yeah it fails because field2 doesn't have a value key , not sure how can i achieve this

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

How can i achieve that?

2 Answers

I suggest to use a ruby's hash to manipulate the object data:

hashy = {
  "field1": {
    "display": 'abc',
    "value": 'def'
  },
  "field2": {
    "display": 'abc2'
  },
  "field3": {
    "display": 'abc3',
    "value": 'def1'
  }
}

Or if it's a json string:

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

You can try this in irb:

h[:field2][:value] ? 'value exists' : 'value don\'t exist and returns nil'

And it will return "value don't exist and returns nil"

You can set your value key with an empty value asking if the value is nil:

hashy[:field2][:value] = '' if hashy[:field2][:value].nil?
# or
hashy[:field2][:value] = '' unless hashy[:field2].has_key?(:value)

Then your hash will be:

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

You can parse the resulting hash into 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\"}}"

You need to convert json into hash using 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"
Related