2017-11-23 1 views
0

json 파일의 형식은 다음과 같습니다. "solution-id": 1일치하는 문자열 키를 찾고 bash를 사용하여 json 파일에서 해당 값을 증가 시키십시오.

그리고이 줄은 파일에서 1000 번 반복됩니다. 지금은 파일이 내가이 사용 bash는 나 파이썬을 달성 할 수있는 방법

"solution-id": 1 
"solution-id": 2 
"solution-id": 3 
... 
.... 
..... 
""solution-id": 1000" 

를 다음과 같습니다도록 줄을 수정해야합니까?

답변

1

Bash 또는 Python으로 JSON을 조작하는 대신 jq을 사용할 수 있습니다.

[ 
    { 
    "solution-id": "foo", 
    "junk": "foo" 
    }, 
    { 
    "solution-id": "bar", 
    "junk": "foo" 
    } 
] 

그리고 당신이로 변환하려면 : : 예를 들어 이 같은 JSON이있는 경우

[ 
    { 
    "solution-id": 0, 
    "junk": "foo" 
    }, 
    { 
    "solution-id": 1, 
    "junk": "foo" 
    } 
] 

당신은 쓸 수 있습니다 : 여기 무슨 일

jq 'to_entries | map(.value["solution-id"] = .key) | map(.value)' file.json 

to_entries 함수는 배열 입력을 받아 키 - 값 쌍을 생성합니다. 여기서 key는 숫자 0, 1, 2, ..., n의 시퀀스이고 value는 배열의 원래 항목입니다. 파이프 라인의 첫 번째 map은 시퀀스 번호로 값을 수정하는 것이고, 두 번째는 값을 추출하는 것입니다 (map). 더 잘 이해하려면 jq to_entries' file.json 만 실행하면 매핑이 더 적합합니다.

+0

감사합니다. @janos! 내 요구 사항에 따라 잘 작동합니다. 그러나 명령에서 "map (.value)"을 사용하여 실제로 어떤 일이 일어나는지 해석하려고했습니다. – hruday

+0

@hruday 이것은 to_entries가하는 것입니다 : 배열 입력을 받아서 키가 숫자 0, 1, 2, ..., n의 시퀀스 인 key-value 쌍을 생성합니다. value는 원래 항목입니다. 배열 파이프 라인의 첫 번째 맵은 시퀀스 번호로 값을 수정하는 것이고, 두 번째 맵은 값을 추출하는 것입니다. 더 잘 이해하려면'jq to_entries 'file.json' 만 실행하면 매핑이 더 이해가됩니다. – janos

관련 문제