programing

JQ json 값에서 줄바꿈 문자가 아닌 줄바꿈 문자를 인쇄하는 방법

goodsources 2023. 3. 27. 21:12
반응형

JQ json 값에서 줄바꿈 문자가 아닌 줄바꿈 문자를 인쇄하는 방법

JSON에서 정보를 출력하는 로그가 몇 개 있습니다.탄력적인 검색을 위한 컬렉션입니다.

일부 테스터 및 운영 담당자는 서버의 로그를 읽을 수 있어야 합니다.

다음은 JSON의 예를 제시하겠습니다.

{
"@timestamp": "2015-09-22T10:54:35.449+02:00",
"@version": 1,
"HOSTNAME": "server1.example",
"level": "WARN",
"level_value": 30000,
"logger_name": "server1.example.adapter",
"message": "message"
"stack_trace": "ERROR LALALLA\nERROR INFO NANANAN\nSOME MORE ERROR INFO\nBABABABABABBA BABABABA ABABBABAA BABABABAB\n"
}

기타 등등.

값에서 볼 수 있듯이 \n 문자 시퀀스 대신 Jq를 줄바꿈으로 출력할 수 있습니까?.stack_trace?

물론이죠!-r옵션을 지정하면 jq는 문자열 내용을 JSON 이스케이프 문자열 대신 단말기에 직접 인쇄합니다.

jq -r '.stack_trace'

사용하는 데 제약이 없는 한jq 수정(또는 실제로는 "un-json-ify")만 가능합니다.jq로 출력하다.sed:

cat the-input | jq . | sed 's/\\n/\n/g'

입력에도 탭이 있는 경우(\tJSON)의 경우:

cat the-input | jq . | sed 's/\\n/\n/g; s/\\t/\t/g'

이것은 특히 편리할 것입니다.stack_traceJava stacktrace 행은 다음과 같이 시작됩니다(로그의 소스는 알리지 않았습니다).<tab>at<space>.

경고: JSON 입력이 다음을 포함하는 의미에서는 당연히 이는 올바르지 않습니다.\\n는 " " 출력되지만 "n" 출력은 됩니다.정확하지는 않지만 인간이 데이터를 훔쳐보는 데는 충분합니다.sed패턴을 더욱 개선하여 (가독성을 희생하면서) 이를 처리할 수 있습니다.

원래 제공된 입력은 그다지 유효한 JSON이 아니며, 원하는 출력이 무엇인지 정확히 알 수 없지만, 다음과 같은 사항이 있을 수 있습니다.이 문서는 현재 버전의 jq(버전 1.5)용으로 작성되어 있지만 jq 1.4에 쉽게 적용할 수 있습니다.

def json2qjson:
  def pp: if type == "string" then "\"\(.)\""  else . end;
  . as $in
  | foreach keys[] as $k (null; null; "\"\($k)\": \($in[$k] | pp)" ) ;


def data: {
  "@timestamp": "2015-09-22T10:54:35.449+02:00",
  "@version": 1,
  "HOSTNAME": "server1.example",
  "level": "WARN",
  "level_value": 30000,
  "logger_name": "server1.example.adapter",
  "message": "message",
  "stack_trace": "ERROR LALALLA\nERROR INFO NANANAN\nSOME MORE ERROR INFO\nBABABABABABBA BABABABA ABABBABAA BABABABAB\n"
};

data | json2qjson

출력:

$ jq -rnf json2qjson.jq
"@timestamp": "2015-09-22T10:54:35.449+02:00"
"@version": 1
"HOSTNAME": "server1.example"
"level": "WARN"
"level_value": 30000
"logger_name": "server1.example.adapter"
"message": "message"
"stack_trace": "ERROR LALALLA
ERROR INFO NANANAN
SOME MORE ERROR INFO
BABABABABABBA BABABABA ABABBABAA BABABABAB
"

언급URL : https://stackoverflow.com/questions/32715008/jq-how-to-print-newline-and-not-newline-character-from-json-value

반응형