यूनिक्स कमांड-लाइन JSON पार्सर? [बन्द है]


128

क्या कोई यूनिक्स (अपने स्वाद का चयन) JSON पार्सर की सिफारिश कर सकता है जिसका उपयोग एक पाइपलाइन में JSON प्रतिक्रिया से मूल्यों को आत्मसात करने के लिए किया जा सकता है?


मुझे pythonpy ( github.com/russell91/pythonpy ) का उपयोग करना पसंद है : cat a.json | py --ji -x 'x.attr'
RussellStewart



1
शहर में एक नया उपकरण है: रम्दा-क्ली , जो रम्दा के करी एपी और लाइवस्क्रिप्ट ट्रिक सिंटैक्स का उपयोग करता है। यह json को इनपुट के रूप में लेने और कार्यों की रचना करने के लिए बनाया गया है। npm install -g ramda-cli
एहविंस

जवाबों:


18

आप इस कमांड-लाइन पार्सर का उपयोग कर सकते हैं (जिसे आप पसंद करते हैं, तो आप bash उर्फ ​​में डाल सकते हैं), Perl कोर में निर्मित मॉड्यूल का उपयोग करके:

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

1
मैं इस के आउटपुट से भ्रमित हूं। आउटपुट में कुंजियों और मानों के बीच वसा तीर (=>) शामिल हैं। यह JSON नहीं है।
लैंडन कुह्न

7
@landon: नहीं, इनपुट JSON है, और आउटपुट एक देशी पर्ल डेटा संरचना है, जिसे आप जरूरत पड़ने पर आगे जोड़ तोड़ कर सकते हैं। इस वन-लाइनर की बात यह है कि यह डेटा का उत्पादन करता है जिसे पढ़ना बहुत आसान है।
ईथर

1
यदि आप एक JSON आउटपुट चाहते हैं, तो आप इस पर्ल वन-लाइनर का उपयोग कर सकते हैं:perl -e "use JSON; print to_json( decode_json(<>), { pretty => 1 } )"
Georgy Vladimirov

232

मुझे python -m json.toolलगता है कि जो प्रति डिफ़ॉल्ट डिफ़ॉल्ट रूप से अधिकांश * निक्स ऑपरेटिंग सिस्टम पर उपलब्ध है।

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

लेकिन यह ध्यान दिया जाना चाहिए कि यह सभी चाबियों को वर्णानुक्रम में छांटेगा, जो कि एक अच्छी बात हो सकती है, जहां कुछ भाषा द्वारा जेनसन उत्पन्न किया गया था जिसमें अनएम्डेड हैशमैप का उपयोग किया गया था ...


5
अधूरा जवाब। यह एक अच्छा कमांड-लाइन विकल्प है यदि लक्ष्य किसी दिए गए JSON फ़ाइल को वैध JSON युक्त के रूप में मान्य करना है।
स्कॉर्पियोडावग

10
इस उत्तर में यह वर्णन नहीं किया गया कि निर्दिष्ट कुंजी के मूल्यों का निरीक्षण कैसे किया जाए।
कॉलिन सु

8
@ColinSu लेकिन यह भी मूल सवाल नहीं था। json.toolसुंदर प्रिंट json के लिए सिर्फ एक छोटा हाथ है। यदि आपको शेल स्क्रिप्ट में json डेटा को निकालने / हेरफेर करने की आवश्यकता है, तो मैं उपयोग करूँगा jqजो शुद्ध भयानक है जो कि है ...
muhqu

@ muhqu हाँ, मुझे पता है, मैं json.toolदैनिक दस बार उपयोग करता हूं । मुझे लगता है कि मैंने प्रश्न में "इंट्रोस्पेक" के अर्थ को गलत तरीके से फैलाया, आपके इंगित करने के लिए धन्यवाद।
कॉलिन सु

1
IMMO यह एक गलत जवाब है क्योंकि अजगर json.toolकेवल दो चीजें करता है: मान्य और सुंदर-प्रिंट वाला जोंस। यह इस तरह से जोंस में मूल्यों का आत्मनिरीक्षण नहीं jqकरता है।
Devy

144

यदि आप एक पोर्टेबल सी संकलित उपकरण की तलाश कर रहे हैं:

http://stedolan.github.com/jq/

वेबसाइट से:

jq JSON डेटा के लिए sed की तरह है - आप इसे स्लाइस और फ़िल्टर और मैप करने के लिए उपयोग कर सकते हैं और संरचित डेटा को उसी आसानी से बदल सकते हैं जो sed , awk , grep और दोस्तों को आपको पाठ के साथ खेलने देता है।

jq उस डेटा स्वरूप को मेन्टल कर सकता है जो आपके पास है जिसे आप बहुत कम प्रयास के साथ चाहते हैं, और ऐसा करने का कार्यक्रम अक्सर कम और सरल होता है, जिसकी आप अपेक्षा करते हैं।

ट्यूटोरियल : http://stedolan.github.com/jq/tutorial/
मैनुअल : http://stedolan.github.com/jq/manual/
डाउनलोड : http://stedolan.github.com/jq/download/


20
यहाँ imo में सबसे अच्छा जवाब। कोई भारी निर्भरता, छोटा, शक्तिशाली, अच्छा दस्तावेज और इसे आज़माने के लिए हवा नहीं। यह सुझाव देने के लिए बहुत बहुत धन्यवाद!
फ्रोजनकोव

उबंटू / डेबियन पर आप बस कर सकते हैं apt install jq
पाब्लो ए

मैंने इससे बहुत पहले एक चाँद से पूछा, और प्यार करना सीखा है jq
जे क्यू कतार

63

मैंने विशेष रूप से कमांड-लाइन JSON हेरफेर के लिए एक मॉड्यूल बनाया है:

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

  • फ्लेक्सिबल - JSON डेटा को संसाधित करने के लिए "स्विस-आर्मी-चाकू" उपकरण - एक साधारण सुंदर-प्रिंटर के रूप में, या एक पूर्ण-संचालित जावास्क्रिप्ट कमांड-लाइन के रूप में उपयोग किया जा सकता है।
  • POWERFUL - पूरी शक्ति और अंडरस्कोर की कार्यक्षमता का विस्तार करता है। js (प्लस underscore.string)
  • SIMPLE - जेएस वन-लाइनर्स को "perl -pe" के समान लिखना सरल बनाता है
  • CHAINED - डेटा प्रोसेसिंग पाइपलाइन बनाने के लिए एक साथ कई कमांड इनवॉइस को जंजीर से बांध दिया जा सकता है
  • बहु-प्रारूप - इनपुट / आउटपुट प्रारूपों के लिए समृद्ध समर्थन - सुंदर मुद्रण, सख्त JSON, आदि [जल्द ही आ रहा है]
  • DOCUMENTED - प्रत्येक कमांड के लिए कई उदाहरणों के साथ उत्कृष्ट कमांड-लाइन प्रलेखन

यह आपको वास्तव में आसानी से शक्तिशाली चीजें करने की अनुमति देता है:

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 डेटा पर कंसोल कमांड चलाना संभव है? उदाहरण के लिए: एक URL सरणी, wgetप्रत्येक URL के साथ एक JSON फ़ाइल दी गई है ।
कैमिलो मार्टिन

@CamiloMartin - ऐसा करने का सबसे आसान तरीका है कि यूआरएल, प्रति पंक्ति एक यूआरएल, और उसके बाद xargs या GNU समानांतर के माध्यम से प्रिंट करें।
डेव डॉपसन

@DaveDopson क्या मैं underscoreनेस्टेड जोंस को नेस्टेड ऑब्जेक्ट्स और एरेज़ को पार्स करने के लिए इस्तेमाल कर सकता हूं ?
user227666

1
@ user227666 - निश्चित। JSON वस्तुओं के कई स्तरों के घोंसले का समर्थन करता है। या आप JSON का मतलब हो सकता है जिसमें एक स्ट्रिंग है जो आगे JSON को एन्कोड करता है। जो काम भी करता है, लेकिन इसके लिए बस थोड़ा सा मूंगिंग की जरूरत होती है।
डेव डॉपसन

@DaveDopson अंडरस्कोर सपोर्ट "में" ए "पैटर्न" है, अर्थात। एक विशिष्ट "कुंजी" के लिए, (केस-इनसेन्सेटिव) मूल्यों का संभावित सेट? मैंने मैच के साथ "jq" की कोशिश की, लेकिन यह काम नहीं करता है। इसके अलावा मेरा पूरा उपयोग-मामला यहां पोस्ट किया - stackoverflow.com/questions/25463196/…
ekta

13

चेकआउट टिक टिक

यह एक सच बैश 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"]``


12

यदि आपके नोड में नोड.जेएस और एनपीएम है तो JSON कमांड लाइन प्रोसेसिंग टूलकिट भी है ।

और आपके यूनिक्स कमांड लाइन पर JSON की मालिश करने के लिए एक और "json" कमांड

और यहाँ अन्य विकल्प हैं:


संबंधित: यूनिक्स के लिए JSON इनपुट पार्स करने के लिए कमांड लाइन टूल?


Ubuntu पर स्थापित करना आसान है: sudo apt-get install python-pip && sudo pip install jsonpipe
activout.se

@ विभेदक क्षमा करें। लेकिन आप npm का उपयोग करके इस उपकरण को स्थापित करते हैं npm install json
गीताकार

@rednaw दुर्भाग्य से, एनपीएम jsonपैकेज अब एक पूरी तरह से अलग पैकेज द्वारा लिया जा रहा है।
ब्रैड

8

किसी ने Jshon या JSON.sh का उल्लेख किया है?

https://github.com/keenerd/jshon

इसके लिए पाइप json, और यह jSON ऑब्जेक्ट्स का पता लगाता है और वर्तमान ऑब्जेक्ट (JSON सरणी के रूप में) और फिर व्हॉट्सएप के बिना ऑब्जेक्ट को पथ प्रिंट करता है।

http://kmkeen.com/jshon/
Jshon स्टड से जोंस टेक्स्ट को लोड करता है, एक्शन करता है, फिर स्टडआउट पर अंतिम एक्शन दिखाता है और सामान्य टेक्स्ट प्रोसेसिंग पाइपलाइन का हिस्सा भी बनाया गया।


पर OSX उदाहरण उपयोग: brew install jshon,cat *.json | jshon
kenorb

2

आप इस उत्तर में सुझाए अनुसार jsawk की कोशिश कर सकते हैं ।

हालांकि आप इसे करने के लिए एक त्वरित अजगर स्क्रिप्ट को कोड़ा मार सकते हैं।


1

के लिए बैश / अजगर , यहां अजगर के चारों ओर एक बुनियादी आवरण है 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_parser {field1} {field2}चला जाएगा print myjson['{field1}']['{field2}'], या तो कुंजी या मूल्यों के साथ जुड़े {field2}, अंतरिक्ष-अलग-अलग।


0

मैंने सिर्फ jkid बनाया जो कि एक छोटी कमांड-लाइन json एक्सप्लोरर है जिसे मैंने आसानी से बड़ी json ऑब्जेक्ट्स का पता लगाने के लिए बनाया है। ऑब्जेक्ट्स को "ट्रांसवर्सली" एक्सप्लोर किया जा सकता है और कंसोल ओवरफ्लो से बचने के लिए "प्रीव्यू" विकल्प मौजूद है।

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

मैं jkidमैक में कैसे स्थापित कर सकता हूं ?
user227666
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.