json 필드에서 큰 따옴표를 제거하고 PostgreSQL에서 문자를 처리합니다.

프랑크

얼마 전에 큰 따옴표로 둘러싸인 숫자 값을 표준 숫자 값으로 변환하기 위해 jsonb 필드가있는 postgresql 데이터베이스에 대한 도움이 필요했으며이 솔루션은 매우 잘 작동했습니다. PostgreSQL에서 선택적인 방식으로 json 필드에서 큰 따옴표 제거

예를 들어 다음 두 행으로 구성된 "test_json"이라는 필드가 있습니다.

{"test_name": "Full", "parameter1": "4.219", "parameter2": 4.4137}
{"test_name": "Full", "parameter1": "3.758", "parameter2": 4.159}

그리고 문제는 수정 후 다음 두 줄이 있다는 것입니다.

{"test_name": "Full", "parameter1": 4.219, "parameter2": 4.4137}
{"test_name": "Full", "parameter1": 3.758, "parameter2": 4.159}

그래서 제안 된 솔루션은 정말 훌륭합니다 ...

그러나 이제 데이터베이스에 숫자 대신 임의의 문자가 제공되는 경우가 있습니다.이 경우이 변환이 작동하지 않습니다. 잘못된 데이터의 예 :

{"test_name": "Full", "parameter1": "4.219", "parameter2": 4.4137}
{"test_name": "Full", "parameter1": "}", "parameter2": 4.159}

또는

{"test_name": "Full", "parameter1": "u", "parameter2": 4.4137}
{"test_name": "Full", "parameter1": "3.758", "parameter2": 4.159}

하지만 거의 같은 캐릭터가 아니기 때문에 자동으로 찾아서 교체하는 데 어려움을 겪습니다.

누구든지 필드 "parameter1"의 값이 숫자로 변환 될 수 있는지 테스트 할 json 필드의 postgresql 함수에 대한 아이디어가 있습니까? 그렇지 않은 경우이 필드 내에서 누락 된 값으로 대체합니까? 예를 들어 "parameter1"에 대한 이전 첫 번째 줄을 사용한 최종 수정 후 : "u"

{"test_name": "Full,"parameter2": 4.4137}
{"test_name": "Full", "parameter1": 3.758, "parameter2": 4.159}

감사합니다 !!

에스 맨

단계별 데모 : db <> fiddle

JSON 요소를 분해하고 모든 숫자와 유사한 텍스트를 필터링하고 결과 요소를 재구성합니다.

SELECT
    id,
    jsonb_object_agg(key, value::numeric)    -- 3
       ||  jsonb_build_object('test_name', test_json -> 'test_name') as test_json  -- 4
FROM
    t_test,
    jsonb_each_text(test_json) as objects    -- 1
WHERE value ~ '^[0-9\.]+$'                   -- 2
GROUP BY id, test_json
  1. 분해 : 모든 속성을 한 행에
  2. 숫자처럼 보이는 모든 값 필터링
  3. JSON 객체 재 집계
  4. 이 속성은 이전에 필터에 의해 제거되었으므로 "test_name"속성을 수동으로 추가하십시오.

UPDATE문 :

UPDATE t_test t
SET test_json = s.test_json
FROM (
    -- <query above>
) s
WHERE t.id = s.id;

편집 : 두 번째 버전 regexp_replace():

  1. 단계 : RegExp를 사용하여 텍스트 기반으로 숫자가 아닌 모든 항목을 제거합니다.

데모 : db <> fiddle

SELECT 
    regexp_replace(
        test_json::text, 
        '"((parameter1|parameter2)": "(?:(?![0-9\.]+).)+?)"', '', 'g'
    )
FROM
    t_test

이것은이 답변의 "negative lookbehind"솔루션을 사용합니다 : https://stackoverflow.com/a/977294/3984221

  1. 단계 : "이전 접근 방식으로 캐릭터를 제거하십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

json 문자열에서 큰 따옴표를 제거 할 수 없습니다.

분류에서Dev

json에서 큰 따옴표를 제거하는 방법

분류에서Dev

큰 따옴표를 추가하면 문자열에서 \가 제거됩니다.

분류에서Dev

문자열에서 큰 따옴표를 제거하는 방법

분류에서Dev

문자열 PHP에서 큰 따옴표를 제거 할 수 없습니다.

분류에서Dev

Environment.GetCommandLineArgs ()는 Json 문자열에서 따옴표를 제거합니다.

분류에서Dev

첫 번째 점 앞의 하위 문자열에서 큰 따옴표를 제거합니다.

분류에서Dev

첫 번째 필드에서 큰 따옴표를 제거하는 CSV 판독기

분류에서Dev

숫자 jsonb postgresql에서 큰 따옴표를 제거하는 업데이트

분류에서Dev

JSON 값에서 큰 따옴표를 처리하는 방법은 무엇입니까?

분류에서Dev

csv 문자열 내에서 큰 따옴표와 쉼표를 처리하는 방법은 무엇입니까?

분류에서Dev

CSV에서 쉼표로 구분되고 큰 따옴표로 캡슐화 된 간격 큰 따옴표를 제거합니다.

분류에서Dev

Javascript는 객체 값에서 큰 따옴표를 제거합니다.

분류에서Dev

문자열 목록에서 큰 따옴표를 제거하는 방법은 무엇입니까?

분류에서Dev

파이썬 목록의 문자열에서 큰 따옴표를 제거하는 방법은 무엇입니까?

분류에서Dev

문자열 양쪽 끝에서 작은 따옴표와 큰 따옴표를 제거하는 방법

분류에서Dev

JSON 문자열에 큰 따옴표를 추가하는 간단한 방법

분류에서Dev

작은 따옴표 / 큰 따옴표를 사용하여 일부 문자열을 에코 할 때 다른 결과

분류에서Dev

큰 따옴표를 제거하고 문자열의 특정 부분에서 이스케이프하는 방법

분류에서Dev

vector <string>에서 큰 따옴표를 제거하려면 C ++ 98

분류에서Dev

C ++ char에서 큰 따옴표를 제거하는 방법

분류에서Dev

입력에서 큰 따옴표를 제거하는 방법

분류에서Dev

Java에서 JSON 파서의 문자열에서 큰 따옴표를 이스케이프하는 방법

분류에서Dev

JSON 배열에서 큰 따옴표와 작은 따옴표를 이스케이프하는 방법

분류에서Dev

JSON에서 따옴표를 제거하고 중괄호를 대괄호로 바꿉니다.

분류에서Dev

sed / awk : 중괄호 {} 안에있는 큰 따옴표 "를 제거합니다.

분류에서Dev

sed / awk : 중괄호 {} 안에있는 큰 따옴표 "를 제거합니다.

분류에서Dev

JSON을 Python 사전으로 변환하면 큰 따옴표를 작은 따옴표로 바꾸고 각 큰 따옴표 열기 인스턴스 앞에 "u"를 추가합니다.

분류에서Dev

Ubuntu 명령 줄에서 작은 따옴표 또는 큰 따옴표를 언제 사용해야합니까?

Related 관련 기사

  1. 1

    json 문자열에서 큰 따옴표를 제거 할 수 없습니다.

  2. 2

    json에서 큰 따옴표를 제거하는 방법

  3. 3

    큰 따옴표를 추가하면 문자열에서 \가 제거됩니다.

  4. 4

    문자열에서 큰 따옴표를 제거하는 방법

  5. 5

    문자열 PHP에서 큰 따옴표를 제거 할 수 없습니다.

  6. 6

    Environment.GetCommandLineArgs ()는 Json 문자열에서 따옴표를 제거합니다.

  7. 7

    첫 번째 점 앞의 하위 문자열에서 큰 따옴표를 제거합니다.

  8. 8

    첫 번째 필드에서 큰 따옴표를 제거하는 CSV 판독기

  9. 9

    숫자 jsonb postgresql에서 큰 따옴표를 제거하는 업데이트

  10. 10

    JSON 값에서 큰 따옴표를 처리하는 방법은 무엇입니까?

  11. 11

    csv 문자열 내에서 큰 따옴표와 쉼표를 처리하는 방법은 무엇입니까?

  12. 12

    CSV에서 쉼표로 구분되고 큰 따옴표로 캡슐화 된 간격 큰 따옴표를 제거합니다.

  13. 13

    Javascript는 객체 값에서 큰 따옴표를 제거합니다.

  14. 14

    문자열 목록에서 큰 따옴표를 제거하는 방법은 무엇입니까?

  15. 15

    파이썬 목록의 문자열에서 큰 따옴표를 제거하는 방법은 무엇입니까?

  16. 16

    문자열 양쪽 끝에서 작은 따옴표와 큰 따옴표를 제거하는 방법

  17. 17

    JSON 문자열에 큰 따옴표를 추가하는 간단한 방법

  18. 18

    작은 따옴표 / 큰 따옴표를 사용하여 일부 문자열을 에코 할 때 다른 결과

  19. 19

    큰 따옴표를 제거하고 문자열의 특정 부분에서 이스케이프하는 방법

  20. 20

    vector <string>에서 큰 따옴표를 제거하려면 C ++ 98

  21. 21

    C ++ char에서 큰 따옴표를 제거하는 방법

  22. 22

    입력에서 큰 따옴표를 제거하는 방법

  23. 23

    Java에서 JSON 파서의 문자열에서 큰 따옴표를 이스케이프하는 방법

  24. 24

    JSON 배열에서 큰 따옴표와 작은 따옴표를 이스케이프하는 방법

  25. 25

    JSON에서 따옴표를 제거하고 중괄호를 대괄호로 바꿉니다.

  26. 26

    sed / awk : 중괄호 {} 안에있는 큰 따옴표 "를 제거합니다.

  27. 27

    sed / awk : 중괄호 {} 안에있는 큰 따옴표 "를 제거합니다.

  28. 28

    JSON을 Python 사전으로 변환하면 큰 따옴표를 작은 따옴표로 바꾸고 각 큰 따옴표 열기 인스턴스 앞에 "u"를 추가합니다.

  29. 29

    Ubuntu 명령 줄에서 작은 따옴표 또는 큰 따옴표를 언제 사용해야합니까?

뜨겁다태그

보관