Home > Blockchain >  Search using JSON field
Search using JSON field

Time:06-14

I am Using MySQL 5.7 where I have below table structure:

  • id(bigInt)
  • item_name(varchar)
  • attributes(JSON array)

Example Data Set

1,"PRODUCT",'[ { "1": [2,4,1]},{ "2": [5,4,6]},{ "3": [5,3,2]}]'

I want to fetch the row based on the attributes field where key value is 1 (Not to include values search needs to be done on keys only).

Tried queries:

SELECT JSON_CONTAINS('{"attributes":[ { "1": [2,4,1]},{ "2": [5,4,6]},{ "3": [5,3,2]}]}',"1") Result;

This always returns 0n as result

SELECT JSON_SEARCH('{"attributes":[ { "1": [2,4,1]},{ "2": [5,4,6]},{ "3": [5,3,2]}]}', 'one',  "1") Result;

This always return null

Any help will be appreciated

CodePudding user response:

SELECT JSON_CONTAINS(
           JSON_EXTRACT(
               '{"attributes":[ { "1": [2,4,1]},{ "2": [5,4,6]},{ "3": [5,3,2]}]}', 
               '$.attributes[*].*'), 
           '1')

PS. For to understand the query execute SELECT JSON_EXTRACT(..) only.

PPS. Pay attention - the value to be found must be JSON or the value which is implicitly convertable to JSON (i.e. string and not numeric).

https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=edc90bff8eb2528708581576805ea98d


SELECT JSON_SEARCH('{"attributes":[ { "1": [2,4,1]},{ "2": [5,4,6]},{ "3": [5,3,2]}]}', 'one', "1")

this always return null

Read the function description carefully - JSON_SEARCH searches for string values only (the value to be searched for is specially marked as search_str) whereas the value to be found is numeric in JSON value.

  • Related