programing

JSON 키에서 선행 및 후행 공백 제거

projobs 2023. 2. 3. 21:08
반응형

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}

dbfiddle 데모

갱신하다

또한 즉시 공백 치환을 수행할 수도 있습니다. 단, 이 방법은 를 사용하여 완전히 제거하는 것보다 훨씬 덜 효율적입니다.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}

dbfiddle 데모

사용할 수 있습니다.

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

반응형