2016-02-02 7 views
21

पार्स करने के लिए।उपयोग JQ मैं की तरह एक JSON संरचना पार्स करने के लिए <code>jq</code> पाने के लिए कोशिश कर रहा हूँ एक JSON स्ट्रिंग

तो, मैं $ jq [.c] myFile.json | jq [.id]

की तर्ज पर कुछ है लेकिन उस jq: error: Cannot index string with string

इसका कारण यह है ग के उत्पादन में एक स्ट्रिंग, नहीं अधिक JSON है साथ दुर्घटनाओं। मैं इस स्ट्रिंग को पार्स करने के लिए jq कैसे प्राप्त करूं?

मेरे प्रारंभिक समाधान सभी भागने वर्ण (\":\", \",\" और \") को बदलने के लिए एसईडी उपयोग करने के लिए है, लेकिन है कि गंदा है, मैं वहाँ jq में बनाया गया एक तरह से यह करने के लिए है मान लेते हैं?

धन्यवाद!

संपादित करें: इसके अलावा, JQ संस्करण यहाँ उपलब्ध है:

$ jq --version 
jq version 1.3 

मैं क्या मैं उसे अपडेट कर सकता है यदि आवश्यक लगता है।

jq '.c | fromjson | .id' myFile.json 

fromjson संस्करण 1.4 में जोड़ा गया:

+0

यह प्रश्न यदि आप ढूंढ रहे हैं तो यह भी मदद करता है: "jq का उपयोग करके अनसस्केप जेसन स्ट्रिंग कैसे करें?" – k0pernikus

उत्तर

27

JQ इस के लिए fromjson निर्मित है।

+2

धन्यवाद। यह काम। मैं इस जवाब को स्वीकार करूंगा, क्योंकि यह अधिक 'idiomaitic' मुझे लगता है। चीयर्स। –

+2

यह सही उत्तर चिह्नित किया जाना चाहिए। –

+0

@ कोलिनग्रागन कृपया करें। – vbence

18

आप कच्चे उत्पादन का उपयोग कर सकते (-r) कि पात्रों unescape देगा:

jq -r .c myfile.json | jq .id 

परिशिष्ट: यह लाभ है कि यह JQ 1.3 और ऊपर में काम करता है; वास्तव में, यह jq के प्रत्येक संस्करण में काम करना चाहिए जिसमें -r विकल्प है।

+0

उत्कृष्ट, धन्यवाद! –

संबंधित मुद्दे