programing

Unix 명령줄 JSON 파서?

javajsp 2023. 3. 25. 09:54

Unix 명령줄 JSON 파서?

파이프라인에서 JSON 응답의 값을 조사하기 위해 사용할 수 있는 Unix(맛 선택) JSON 파서를 추천할 수 있습니까?

는 는는더 prefer prefer ipython -m json.tool대부분의 *nix 운영체제에서는 디폴트별로 사용할 수 있습니다.

$ echo '{"foo":1, "bar":2}' | python -m json.tool
{
    "bar": 2, 
    "foo": 1
}

주의: 사용하시는 python 버전에 따라 모든 키가 알파벳 순으로 정렬될 수 있습니다.이것은 좋은 일이거나 좋은 일이 아닙니다.python 2에서는 키를 정렬하는 것이 기본이었지만 python 3.5+에서는 자동으로 정렬되지 않지만 키별로 명시적으로 정렬할 수 있는 옵션이 있습니다.

$ echo '{"foo":1, "bar":2}' | python3 -m json.tool --sort-keys
{
    "bar": 2, 
    "foo": 1
}

휴대용 C 컴파일 도구를 찾는 경우:

https://stedolan.github.io/jq/

웹 사이트:

jq는 JSON 데이터용 sed와 비슷합니다. sed, awk, grep 및 친구들이 텍스트를 가지고 놀 수 있는 처럼 쉽게 구조화된 데이터를 슬라이스, 필터링, 매핑 및 변환할 수 있습니다.

jq는 당신이 가지고 있는 데이터 포맷을 아주 적은 노력으로 원하는 포맷으로 만들 수 있으며, 그렇게 하기 위한 프로그램은 종종 당신이 예상했던 것보다 짧고 단순합니다.

튜토리얼: https://stedolan.github.io/jq/tutorial/
매뉴얼: https://stedolan.github.io/jq/manual/
다운로드: https://stedolan.github.io/jq/download/

명령줄 JSON 조작용으로 특별히 설계된 모듈을 만들었습니다.

https://github.com/ddopson/underscore-cli

  • 플렉시블 - JSON 데이터 처리를 위한 "swiss-army-knife" 툴은 간단한 프리 프린터 또는 풀 파워 Javascript 명령줄로 사용할 수 있습니다.
  • 파워풀 - underscore.js(및 underscore.string)의 모든 파워와 기능을 제공합니다.
  • SIMPLE - "perl -pe"를 사용하는 것과 유사하게 JS 한 줄 쓰기를 단순화합니다.
  • 연쇄 - 여러 명령 호출을 연쇄하여 데이터 처리 파이프라인을 만들 수 있습니다.
  • MULTI-FORMAT - 입력/출력 포맷을 풍부하게 지원 - 예쁜 인쇄, 엄격한 JSON 등 [곧 출시 예정]
  • 문서 - 각 명령어에 대한 여러 예를 포함한 뛰어난 명령줄 문서

강력한 작업을 매우 쉽게 수행할 수 있습니다.

cat earthporn.json | underscore select '.data .title'
# [ 'Fjaðrárgljúfur canyon, Iceland [OC] [683x1024]',
#   'New town, Edinburgh, Scotland [4320 x 3240]',
#   'Sunrise in Bryce Canyon, UT [1120x700] [OC]',
# ...
#   'Kariega Game Reserve, South Africa [3584x2688]',
#   'Valle de la Luna, Chile [OS] [1024x683]',
#   'Frosted trees after a snowstorm in Laax, Switzerland [OC] [1072x712]' ]

cat earthporn.json | underscore select '.data .title' | underscore count
# 25

underscore map --data '[1, 2, 3, 4]' 'value+1'
# prints: [ 2, 3, 4, 5 ]

underscore map --data '{"a": [1, 4], "b": [2, 8]}' '_.max(value)'
# [ 4, 8 ]

echo '{"foo":1, "bar":2}' | underscore map -q 'console.log("key = ", key)'
# key = foo
# key = bar

underscore pluck --data "[{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}]" name
# [ 'moe', 'larry', 'curly' ]

underscore keys --data '{name : "larry", age : 50}'
# [ 'name', 'age' ]

underscore reduce --data '[1, 2, 3, 4]' 'total+value'
# 10

또한 최고의 "스마트 스페이스" JSON 포메터를 갖추고 있습니다.

기능 요구가 있는 경우는, 이 투고에 코멘트를 달거나, github 에 문제를 추가해 주세요.커뮤니티 구성원들이 필요로 하는 기능에 우선순위를 매길 수 있다면 기쁘겠습니다.

Perl 코어에 내장된 모듈을 사용하여 다음 명령줄 파서(필요에 따라 bash 에일리어스에 넣을 수 있습니다)를 사용할 수 있습니다.

perl -MData::Dumper -MJSON::PP=from_json -ne'print Dumper(from_json($_))'

체크 아웃 Tick

진정한 Bash JSON 파서입니다.

#!/bin/bash
. /path/to/ticktick.sh

# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`

tickParse "$DATA"

echo ``pathname``
echo ``headers["user-agent"]``

스택에 node.js 및 npm이 있는 경우 JSON 명령줄 처리 툴킷도 있습니다.

또한 Unix 명령줄에서 JSON을 마사지하기 위한 또 다른 "json" 명령도 있습니다.

또 다른 대안은 다음과 같습니다.


관련:Unix용 JSON 입력을 해석하기 위한 명령줄 도구?

Jshon이나 JSON.sh에 대해 언급하신 분?

https://github.com/keenerd/jshon

파이프 json을 사용하여 json 객체를 통과하고 현재 객체에 대한 경로(JSON 배열)를 출력한 다음 공백 없이 객체에 대한 경로를 출력합니다.

http://kmkeen.com/jshon/http.com/jshon/
Jshon은 stdin에서 json 텍스트를 로드하고 액션을 수행한 다음 stdout에서 마지막 액션을 표시하며 일반 텍스트 처리 파이프라인의 일부로 만들었습니다.

답변에 제시된 바와 같이 jsawk을 시도해 볼 수 있습니다.

이 작업을 수행하기 위해 빠른 python 스크립트를 작성할 수 있습니다.

Bash/Python은 Python의 기본 랩퍼입니다.simplejson:

json_parser() {
    local jsonfile="my_json_file.json"
    local tc="import simplejson,sys; myjsonstr=sys.stdin.read(); "`
            `"myjson=simplejson.loads(myjsonstr);"
    # Build python print command based on $@
    local printcmd="print myjson"
    for (( argn=1; argn<=$#; argn++ )); do
        printcmd="$printcmd['${!argn}']"
    done
    local result=$(python -c "$tc $printcmd.keys()" <$jsonfile 2>/dev/null \
        || python -c "$tc $printcmd" <$jsonfile 2>/dev/null)
    # For returning space-separated values
    echo $result|sed -e "s/[]|[|,|']//g"
    #echo $result 
}

실제로 네스트된 사전 형식의 데이터만 처리할 수 있지만, 필요한 데이터를 처리할 수 있어 json을 통과하는 데 유용합니다.아마 입맛에 맞출 수 있을 거예요.

어쨌든, 또 다른 외부 의존의 원천이 되고 싶지 않은 사람들을 위해 자체 개발한 것입니다.물론 비단뱀만 빼고요.

예.json_parser {field1} {field2}실행하다print myjson['{field1}']['{field2}']키 또는 관련 값 중 하나를 나타냅니다.{field2}, 공백으로 구분됩니다.

큰 json 객체를 쉽게 탐색할 수 있도록 만든 작은 명령줄 json 탐색기인 jkid를 만들었습니다.오브젝트는 "횡단적으로" 탐색할 수 있으며 콘솔 오버플로를 방지하기 위해 "미리 보기" 옵션이 있습니다.

$  echo '{"john":{"size":20, "eyes":"green"}, "bob":{"size":30, "eyes":"brown"}}' > test3.json
$  jkid . eyes test3.json 
object[.]["eyes"]
{
  "bob": "brown", 
  "john": "green"
}

언급URL : https://stackoverflow.com/questions/3858671/unix-command-line-json-parser