반응형
JSON 키에서 선행 및 후행 공백 제거
JSON_EXTRACT를 사용하여 MariaDB 서버에서 JSON 값을 가져오려고 합니다.단, 줄 끝, 공간, 탭 등 공백이 많은 JSON 키가 있습니다.데이터는 이미 존재합니다.따라서 키에 공백이 포함되어 있기 때문에 올바른 키 이름을 지정할 수 없습니다.JSON 값에도 공백이 있지만 TRIM() 함수를 사용하여 값에서 공백을 제거할 수 있습니다.하지만 키네임을 자르기 위해 무엇을 할 수 있을까요?
예를 들어 다음과 같습니다.
CREATE TABLE test.product_json_table (
id INT AUTO_INCREMENT NOT NULL,
product VARCHAR(20) NOT NULL,
description LONGTEXT ASCII,
PRIMARY KEY (id),
CHECK (JSON_VALID(description))
) ENGINE = InnoDB ROW_FORMAT = DEFAULT;
INSERT INTO test.product_json_table(product, description)
VALUES( 'truck_space', '{" \r\nwheels ": 4, "seats": 3, " fuel ": "diesel", " \r\n mileage ": 8}');
다음 쿼리는 작동하지 않습니다.
SELECT id, product, description
FROM test.product_json_table
WHERE JSON_EXTRACT(description, '$.wheels') > 2;
JSON 키 "휠"에 공백이 있기 때문에 쿼리가 작동하지 않습니다.키 "마일리지"도 마찬가지입니다.
이 문제를 어떻게 해결해야 할까요?잘 부탁드립니다.
데이터베이스에 입력하기 전에 공백 공간을 잘라내라는 @BillKarwin의 제안과 더불어 데이터베이스의 모든 값을 업데이트하여 스플리어스 공백을 제거할 수도 있습니다.
UPDATE product_json_table
SET description = REGEXP_REPLACE(description, '\\s|\\r|\\n','');
그러면 원래 쿼리가 작동합니다.
SELECT id, product, description
FROM product_json_table
WHERE JSON_EXTRACT(description, '$.wheels') > 2;
출력:
id product description
1 truck_space {"wheels":4,"seats":3,"fuel":"diesel","mileage":8}
갱신하다
또한 즉시 공백 치환을 수행할 수도 있습니다. 단, 이 방법은 를 사용하여 완전히 제거하는 것보다 훨씬 덜 효율적입니다.UPDATE
위의 쿼리:
SELECT id, product, REGEXP_REPLACE(description, '\\s|\\r|\\n','') AS description
FROM product_json_table
WHERE JSON_EXTRACT(REGEXP_REPLACE(description, '\\s|\\r|\\n',''), '$.wheels') > 2
출력:
id product description
1 truck_space {"wheels":4,"seats":3,"fuel":"diesel","mileage":8}
사용할 수 있습니다.
REGEXP_REPLACE(query, '\\s|\\r|\\n','')
봐
CREATE TABLE product_json_table ( id INT AUTO_INCREMENT NOT NULL, product VARCHAR(20) NOT NULL, description LONGTEXT ASCII, PRIMARY KEY (id), CHECK (JSON_VALID(description)) )
✓
INSERT INTO product_json_table(product, description) VALUES( 'truck_space', REGEXP_REPLACE('{" \r\nwheels ": 4, "seats": 3, " fuel ": "diesel", " \r\n mileage ": 8}', '\\s|\\r|\\n',''));
✓
select * from product_json_table
id | product | 설명-: | :---------- | :-------------------------------------------------1 | truck_space | {"traffic":4", "traffic":3", 연료":"traffic":8}
db <>여기에 추가
언급URL : https://stackoverflow.com/questions/54609588/remove-leading-and-trailing-whitespaces-in-json-keys
반응형
'programing' 카테고리의 다른 글
SQL: MySQL에서 기존 열을 기본 키로 설정 (0) | 2023.02.03 |
---|---|
JavaScript에서 변수가 배열인지 확인하려면 어떻게 해야 합니까? (0) | 2023.02.03 |
Vue에서 플러그인에서 생성, 메서드, 마운트 등의 글로벌 기능을 추가하는 방법 (0) | 2023.02.03 |
MySQL 5.6에서 5.7로 이행한 이후 MySQL JOIN은 < > 연산자를 사용하여 WHERE 절을 필터링하지 않았습니다. (0) | 2023.01.24 |
하나의 쿼리로 여러 행 삽입 MySQL (0) | 2023.01.24 |