I'm trying to get the value of a property, contained inside a JSON object, satisying the condition that the name of another property matches a specific value.
Let's say I've got the followig JSON object stored in a column:
{
"f2": [
{"name":"f21","value":"foo_21"},
{"name":"hit","value":"foo_hit"},
{"name":"f22","value":"foo_22"}
]
}
And I'd like to get the value "foo_hit" because it's the value matching the given name "hit" of the JSON object the value "foo_hit" belongs to. Bear in mind that the matching JSON object {"name":"hit","value":"foo_hit"} could appear in whatever position within the array.
The expected value to get would be "foo_hit" (double quotation marks included).
To accomplish that, I've tried the following sql statements (based on some clues got from this post):
CREATE TABLE mytable (jsonstr JSON);
INSERT INTO mytable VALUES
('{"f2": [{"name":"f21","value":"foo_21" },
{"name":"hit","value":"foo_hit"},
{"name":"f22","value":"foo_22" }]}');
SELECT JSON_EXTRACT(jsonstr,'$**.name')
FROM mytable
WHERE (JSON_EXTRACT(jsonstr,'$**.name')="hit");
But the SELECT statement produces an empty result.
Any clarification about how to accomplish the targeted task would be appreciated.
You can use
JSON_TABLEto extract values from your table. This will ensure that your values are correctly linked to your names. Then it's enough to filter your values using the corresponding "value_" column."Output":
Check the demo here.