반응형
MariaDB/MySQL - 중첩된 객체의 키를 기반으로 JSON을 쿼리하는 방법
MariaDB/MySQL에 저장된 다음 JSON 개체가 지정됩니다.
SET @j = '{
"thing": {
"sub_things": [
{
"attribute": [
{ "1": 40 },
{ "5": 25 },
{ "13": 35 }
]
},
{
"attribute": [
{ "2": 50 },
{ "7": 50 }
]
}
]
}
}'
반환하려면 어떻게 쿼리해야 합니까?sub_things
의 오브젝트 중 하나가attribute
어레이에는 특정 키가 있습니다.예를 들어 키가 13인 경우 첫 번째 키가 반환됩니다.sub_thing
.
감사합니다!
한 번의 질문으로 당신이 필요한 것을 얻을 수 있을지는 잘 모르겠습니다.
다음과 같은 저장 프로시저를 통해 아이디어를 얻을 수 있습니다(저장 프로시저는 MariaDB 및 MySQL에 적합합니다).
> DROP PROCEDURE IF EXISTS `JSON_query_based_on_key`;
Query OK, 0 rows affected (0.01 sec)
> DELIMITER //
> CREATE PROCEDURE `JSON_query_based_on_key`(
-> `json` TEXT,
-> `key` VARCHAR(5)
-> )
-> BEGIN
-> DECLARE `sub_things_current` INT
-> DEFAULT JSON_LENGTH(`json`, '$.thing.sub_things') - 1;
->
-> WHILE (`sub_things_current` > -1) DO
-> IF NOT JSON_CONTAINS_PATH(
-> `json`,
-> 'one',
-> CONCAT('$.thing.sub_things[', `sub_things_current`, '].attribute[*]."', `key`, '"')
-> ) THEN
-> SET `json` := JSON_REMOVE(
-> `json`,
-> CONCAT('$.thing.sub_things[', `sub_things_current`, ']'));
-> END IF;
-> SET `sub_things_current` := `sub_things_current` - 1;
-> END WHILE;
->
-> SELECT JSON_EXTRACT(`json`, '$.thing');
-> END//
Query OK, 0 rows affected (0.00 sec)
> DELIMITER ;
> CALL `JSON_query_based_on_key`('{
'> "thing": {
'> "sub_things": [
'> {
'> "attribute": [
'> { "1": 40 },
'> { "5": 25 },
'> { "13": 35 }
'> ]
'> },
'> {
'> "attribute": [
'> { "2": 50 },
'> { "7": 50 }
'> ]
'> }
'> ]
'> }
'> }', '13');
+---------------------------------------------------------------------+
| JSON_EXTRACT(`json`, '$.thing') |
+---------------------------------------------------------------------+
| {"sub_things": [{"attribute": [{"1": 40}, {"5": 25}, {"13": 35}]}]} |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
필요에 따라서 코드를 변경합니다.
db <>fiddle for MariaDB(10.2.6) 및 db-fiddle for MySQL(5.7.17)을 참조하십시오.
언급URL : https://stackoverflow.com/questions/45143538/mariadb-mysql-how-to-query-json-based-on-key-of-nested-object
반응형
'programing' 카테고리의 다른 글
JavaScript에서 정의되지 않은 경우 변수 설정 (0) | 2022.10.29 |
---|---|
MySQL에서 Maria로 WAMP 서버 전환DB (0) | 2022.10.29 |
HTML5 캔버스를 서버에 이미지로 저장하는 방법 (0) | 2022.10.29 |
jQuery를 사용하여 페이지 로드 시 양식 입력 텍스트 필드에 초점을 맞추는 방법은 무엇입니까? (0) | 2022.10.29 |
.map()의 요소를 건너뛰는 방법 (0) | 2022.10.29 |