http://www.perlmonks.org?node_id=1052651

walkingthecow has asked for the wisdom of the Perl Monks concerning the following question:

I have JSON data that looks like this:
{ "People" : [ { "name" : "bob", "title" : "janitor", "email" : "taco@blah.com", "iq" : "180", "favorite_food" : "wagyu steak" }, { "name" : "joe", "title" : "software engineer", "email" : "", "iq" : "80", "favorite_food" : "raw hamburger" }, { "name" : "sandy", "title" : "dishwasher", "email" : "", "iq" : "240", "favorite_food" : "tacos" }, { "name" : "george", "title" : "software engineer", "email" : "", "iq" : "14", "favorite_food" : "tacos" } ] }
I am trying to filter this data in such a way that it returns any arrays whose values (any value) matches a word. So, using the above example, say that someone was to want to filter this out on the word taco, that filter would return this:
{ "People" : [ { "name" : "bob", "title" : "janitor", "email" : "taco@blah.com", "iq" : "180", "favorite_food" : "wagyu steak" }, { "name" : "sandy", "title" : "dishwasher", "email" : "", "iq" : "240", "favorite_food" : "tacos" }, { "name" : "george", "title" : "software engineer", "email" : "", "iq" : "14", "favorite_food" : "tacos" } ] }
It returned anything where a value matches "taco." Think of it like this: Each key/value pair is a column in a SQL table, and I am trying to say
SELECT * FROM People WHERE name = 'taco' OR title = 'taco' OR email = +'taco' OR iq = 'taco' OR favorite_food eq 'taco';
I'd really like to do this matching with grep, but just knowing how to do it at all will be a start in the right direction (if it is possible).