programing

에서 들여쓰기된 JSON 문자열을 최소화합니다.그물

telebox 2023. 3. 18. 08:28
반응형

에서 들여쓰기된 JSON 문자열을 최소화합니다.그물

입력된 JSON 문자열이 있습니다.

{
  "a": 1
}

그러나 직렬화 또는 역직렬화할 인스턴스의 유형은 없습니다.

현재 상황에서 JSON 문자열을 최소화하는 가장 효율적인 방법은 무엇입니까?

{"a":1}

저는 도서관이 생산 준비가 되어 있다면 사용하는 것을 꺼리지 않습니다.

Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1")

할 수 있을 거예요.공백 문자를 포함한 문자열은 유지되고 다른 공백 문자는 모두 삭제됩니다.모든 JSON 키워드(false,true,null)는 콤마 또는 기타 구두점으로 구분해야 하므로 문자열 내의 공백만 유지할 필요가 있습니다.


첫 번째 옵션(\"(?:[^\"\\\\]|\\\\.)*\")는 이중 따옴표로 묶인 문자열과 일치합니다.(...)출력은 캡처되어 대체품으로 사용할 수 있음을 의미합니다.$1.그[^\"\\\\]큰따옴표 또는 이스케이프 문자를 제외한 모든 문자와 일치합니다.\.

매칭은 왼쪽에서 오른쪽으로 이루어지기 때문에 두 번째 옵션은\s+는 문자열 내의 공간과 일치하지 않습니다.

그래서 우리는 전체 현과 바깥의 공간을 일치시킵니다.전자의 경우,$1스트링 토큰입니다.후자의 경우는$1그룹 1이 사용되지 않았기 때문에 빈 문자열입니다.


이것은 의도한 대로 동작합니다.

  1. 공간을 포함할 수 있는 JSON 토큰은 이중 따옴표로 묶인 문자열뿐입니다.JSON에는 따옴표로 둘러싸인 문자열이나 코멘트가 없습니다.
  2. JSON 문법은 모든 다중 문자 토큰 간에 단일 문자 구두점이 필요하므로 공백을 제거해도 토큰이 병합되지 않습니다.JavaScript에서는 토큰을 끊으려면 공간이 필요하기 때문에 문제가 발생할 수 있습니다.var x=0와는 다르다varx=0그리고.x - -(y)와는 다르다x--(y).

아래 정규식은 나에게 효과가 있다.

string json = @"{ 
                  "window": {
                  "title": "Sample Konfabulator Widget",
                  "name": "main_window",
                  "width": 500,
                  "height": 500
                  } 
                }"

Regex.Replace(json, @"\s(?=([^""]*""[^""]*"")*[^""]*$)", string.Empty);

에서 사용하고 있습니다.NET Core 앱 프로젝트.Regex는 그 대답에서 왔다.

언급URL : https://stackoverflow.com/questions/8913138/minify-indented-json-string-in-net

반응형