JSON 출력이 있고 Linux에서 일부 매개변수를 추출해야 합니다.
JSON 출력은 다음과 같습니다.
{
items:[
{
provider_name:"ucp-ipg",
subject_name:"rtm-instrumentation",
dataset_name:"rtm-instrumentation-dataset-hour-sliced",
dataset_key:[
2018-03-06T06:00:00Z,
"000394e3-a9eb-40b6-9463-fbd588d20ba4"
],
record_count:21,
state:"complete",
version:0,
etag:"a221df62",
creation_timestamp:2018-03-06T06:10:46.294-00:00,
created_by:"AAA",
modification_timestamp:2018-03-06T06:10:46.294-00:00,
modified_by:"AAA"
},
{
provider_name:"ucp-ipg",
subject_name:"rtm-instrumentation",
dataset_name:"rtm-instrumentation-dataset-hour-sliced",
dataset_key:[
2018-03-06T06:00:00Z,
"00097722-b02f-4938-bd4b-d935047c3837"
],
record_count:17,
state:"complete",
version:0,
etag:"aa4dbc25",
creation_timestamp:2018-03-06T06:12:23.293-00:00,
created_by:"AAA",
modification_timestamp:2018-03-06T06:12:23.293-00:00,
modified_by:"AAA"
}
내가 원하는 출력
dataset_key:[
2018-03-06T06:00:00Z,
"00097722-b02f-4938-bd4b-d935047c3837"
]
다음을 시도했지만 작동하지 않습니다.
file.txt | python -mjson.tool | grep 'dataset_key'
답변1
JSON 문서가 잘 구성되고 완전하다고 가정합니다.
{
"items": [
{
"provider_name": "ucp-ipg",
"subject_name": "rtm-instrumentation",
"dataset_name": "rtm-instrumentation-dataset-hour-sliced",
"dataset_key": [
"2018-03-06T06:00:00Z",
"000394e3-a9eb-40b6-9463-fbd588d20ba4"
],
"record_count": 21,
"state": "complete",
"version": 0,
"etag": "a221df62",
"creation_timestamp": "2018-03-06T06:10:46.294-00:00",
"created_by": "AAA",
"modification_timestamp": "2018-03-06T06:10:46.294-00:00",
"modified_by": "AAA"
},
{
"provider_name": "ucp-ipg",
"subject_name": "rtm-instrumentation",
"dataset_name": "rtm-instrumentation-dataset-hour-sliced",
"dataset_key": [
"2018-03-06T06:00:00Z",
"00097722-b02f-4938-bd4b-d935047c3837"
],
"record_count": 17,
"state": "complete",
"version": 0,
"etag": "aa4dbc25",
"creation_timestamp": "2018-03-06T06:12:23.293-00:00",
"created_by": "AAA",
"modification_timestamp": "2018-03-06T06:12:23.293-00:00",
"modified_by": "AAA"
}
]
}
배열 item
의 두 번째 요소는 다음과 같습니다.dataset_key
jq
:
$ jq '.items[1].dataset_key' file.json
[
"2018-03-06T06:00:00Z",
"00097722-b02f-4938-bd4b-d935047c3837"
]
다음에서 가져오려면 [1]
으로 변경하세요 .[-1]
dataset_key
마지막 item
요소.
배열 요소의 원시 데이터를 가져옵니다.
$ jq -r '.items[1].dataset_key[]' file.json
2018-03-06T06:00:00Z
00097722-b02f-4938-bd4b-d935047c3837
답변2
예를 들어 제어하지 않는 API의 출력과 같이 json을 유효하게 만들 수 없는 경우 원하는 출력이 반환됩니다.
perl -0777 -ne '/(dataset_key:\[[^\]]*\])/ && print "$1\n"' file.txt
참고: 이 프로젝트에
]
.
답변3
json에서 정보를 추출하는 간단한 방법은 다음과 같습니다.jtc
(json이 고정되어 있다고 가정):
bash $ jtc -w '<dataset_key>l+0' -r your.json
[ "2018-03-06T06:00:00Z", "000394e3-a9eb-40b6-9463-fbd588d20ba4" ]
[ "2018-03-06T06:00:00Z", "00097722-b02f-4938-bd4b-d935047c3837" ]
bash $