ruby-on-railsjsontyphoeus

rails render extract value from json response


I have a Rails app and I am trying to render an array of items from a parsed JSON hash.

My current render statement looks like this

resp = JSON.parse(response.body)
render json: resp

I am using Typheous and this code did not work for me:

resp = JSON.parse(response.body).fetch("item")

The following is the JSON hash (the item key has many values but I'm only displaying one for brevity):

{
  ebay: [{
    findItemsByKeywordsResponse: [{
      ack: [],
      version: [],
      timestamp: [],
      searchResult: [{
        count: "91",
        item: [{
          itemId: [ "321453454731" ]
        }]
      }]
    }]
  }]
}

How can I render an array of items from the parsed JSON hash?


Solution

  • Since there is only one value for the ebay and findItemsByKeywordsResponse keys (per the OP's comment), you could retrieve an array of items by doing something like this:

    resp = JSON.parse(response.body)
    resp[:ebay].first[:findItemsByKeywordsResponse].first[:searchResult].first[:item]
    

    This will give you an array of hashes containing the itemId and any other key-value pairs.

    The reason you want to include the .first (or [0]) is because based on the parsed JSON response, your hash contains an array of hashes nested all the way to the item array. If there are multiple searchResult values, you'll need to iterate through those before getting your item array.