JSON 문자열을 jq(또는 다른 대체)로 해석하는 방법
나는 그것을 얻으려고 노력하고 있다.jq다음과 같이 JSON 구조를 해석합니다.
{
"a" : 1,
"b" : 2,
"c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}
즉, JSON의 요소는 이스케이프된 json을 가진 문자열입니다.
그래서, 제가 가지고 있는 것은$ jq [.c] myFile.json | jq [.id]
하지만 그건...jq: error: Cannot index string with string
이는 .c의 출력이 문자열이지 더 많은 JSON이 아니기 때문입니다.이 문자열을 해석하기 위해 jq를 얻는 방법은 무엇입니까?
초기 해결책은 sed를 사용하여 모든 이스케이프 문자를 교체하는 것입니다.\":\",\",\"그리고.\") 하지만 그건 좀 지저분해요. 제 생각엔,jq이걸 하기 위해서요?
감사합니다!
edit: 또한 여기서 사용할 수 있는 jq 버전은 다음과 같습니다.
$ jq --version
jq version 1.3
필요하다면 업데이트 할 수 있을 것 같아요.
jq에는 다음과 같은 기능이 있습니다.
jq '.c | fromjson | .id' myFile.json
fromjson는 버전 1.4에서 추가되었습니다.
문자를 이스케이프 해제하는 원시 출력(-r)을 사용할 수 있습니다.
jq -r .c myfile.json | jq .id
ADDENDUM: 이것은 jq 1.3 이상에서 동작한다는 장점이 있습니다.실제로 -r 옵션이 있는 모든 버전의 jq에서 동작합니다.
동기: JSON 문자열을 해석하는 경우 - 따옴표로 둘러싸여 String 버퍼로 표시되는 JSON 개체를 이스케이프하여 유효한 JSON 개체로 변환합니다.예를 들어 다음과 같습니다.
일부 JSON 이스케이프되지 않은 문자열:
"{\"name\":\"John Doe\",\"position\":\"developer\"}"
예상되는 결과(JSON 객체):
{"name":"John Doe","position":"developer"}
솔루션:JSON 문자열을 이스케이프하여 유효한 JSON 개체로 변환하려면sed특정 문자를 제거/바꾸기 위해 regex 식을 사용합니다.
cat current_json.txt | sed -e 's/\\\"/\"/g' -e 's/^.//g' -e 's/.$//g'
s/\\\"/\"/g모든 백슬래시와 따옴표를 바꿉니다(\"따옴표로 묶음( )")
s/^.//g스트림의 첫 번째 문자를 문자 없음으로 대체
s/.$//g스트림의 마지막 문자를 문자 없음으로 바꾸기
언급URL : https://stackoverflow.com/questions/35154684/how-to-parse-a-json-string-with-jq-or-other-alternatives
'programing' 카테고리의 다른 글
| 값에 따른 json의 python 정렬 목록 (0) | 2023.03.28 |
|---|---|
| Python의 json.dumps가 직렬화 불가능한 필드를 무시하도록 하는 방법 (0) | 2023.03.28 |
| Angular가 있는 루프 내부의 라벨을 사용하는 방법JS (0) | 2023.03.28 |
| Formik과 함께 Material-UI의 자동 완성 구성요소 사용 (0) | 2023.03.28 |
| 효소의 얕은 포장지 내용물 인쇄 방법 (0) | 2023.03.23 |