셸에서 JSON 숫자를 문자열로 변환

셸에서 JSON 숫자를 문자열로 변환

파싱할 때JSONjshon, 숫자를 과학적 표기법으로 변환하는 명령줄 도구입니다 .그들을 둥글게하려고.

이러한 문제를 피하기 위해 jshon이 이러한 숫자를 문자열로 처리하기를 원합니다. 이렇게 하려면 json 파일의 모든 숫자 주위에 따옴표를 넣어야 한다는 것을 알았습니다. 인터넷 검색에 실패한 후 숫자를 인용하기 위해 sed 명령을 작성하려고 시도했지만 매우 안전하지 않으며 많은 문제에 부딪혔습니다.

 sed -r 's/(" ?[:,] ?)"?([0-9]+(\.[0-9]+)?)"?([,}]|$)/\1"\2"\4/g' $file

안정적인 곳이 있는지 알고 싶습니다.파서이것은 나에게 원하는 결과를 제공합니다. 작은 위험한 작업을 수행하려면 이 코드가 필요하고 임의의 웹 사이트에서 json을 구문 분석할 것이기 때문에 질문에 샘플 json 파일을 포함하지 않았습니다.

답변1

이는 셸에서 필터로 호출할 수 있는 간단한 python3 스크립트입니다. 아래 스크립트를 이라는 파일에 저장하고 filter.py실행 가능하게 만든 다음 사용하십시오../filter.py <$file

JSON 파일의 구조를 모르기 때문에 한 줄에 하나의 json 문자열이 있다고 가정합니다. 조정이 필요하시면 알려주세요.

#!/usr/bin/python3
import json
import sys
for line in sys.stdin:
   try:
       print(json.dumps(json.loads(line, parse_float=str)))
   except (ValueError, TypeError):
       pass  # skip lines not parsable by json
       # print(line)  # uncomment to print non-json lines as-is
   # uncomment to ignore all other errors
   # except Exception:
   #    pass
exit(0)

이것은 내 테스트의 결과입니다.

$ cat $file
{"a":200.12345678999999, "b":0.00001875}
{"a":200.1234567893029999, "b":0.03091875}
$ ./test.py <$file
{"a": "200.12345678999999", "b": "0.00001875"}
{"a": "200.1234567893029999", "b": "0.03091875"}

관련 정보