मैं पार्सिंग जोंस के लिए "jq" से परिचित हूं।
मैं एक ऐसी सेवा के साथ काम करता हूं जो कि एक json प्रतिक्रिया पैदा करती है जहां गुणों में से एक स्वयं एक json स्ट्रिंग है। मैं उस उद्धृत मूल्य को एक वैध जौन स्ट्रिंग में कैसे परिवर्तित कर सकता हूं ताकि मैं इसे jq के साथ संसाधित कर सकूं?
उदाहरण के लिए, अगर मैं सिर्फ "jq" से सादे सुंदर मुद्रित जोंस को देखता हूं, तो यहां आउटपुट का एक छोटा अंश है:
"someJsonString": "{\"date\":\"2018-01-08\", ...
मैं उस संपत्ति का मूल्य प्राप्त करने के लिए jq का उपयोग कर सकता हूं, लेकिन मुझे "इसे हटाकर" द्वारा उद्धृत स्ट्रिंग को मान्य json में बदलने की आवश्यकता है।
मुझे लगता है कि मैं इसे sed में पाइप कर सकता हूं, उद्घाटन को हटाकर और दोहरे उद्धरण समाप्त कर सकता हूं, और सभी बैकस्लैश (" sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'
") को हटा सकता हूं । यह काम करने लगता है, लेकिन यह सबसे मजबूत समाधान की तरह प्रतीत नहीं होता है।
अपडेट :
मैं जो कर रहा हूं, उस पर थोड़ा स्पष्ट होने के लिए, यहां कुछ नमूने हैं जो दिखाते हैं कि मैंने क्या कोशिश की है:
% curl -s -q -L 'http://.../1524.json' | jq '.results[0].someJsonString' | jq .
"{\"date\":\"2018-01-08\",...
% echo $(curl -s -q -L 'http:/.../1524.json' | jq '.results[0].someJsonString') | jq .
"{\"date\":\"2018-01-08\",...
अपडेट :
यहाँ एक पूरी तरह से स्टैंडअलोन उदाहरण दिया गया है:
% cat stuff.json | jq .
{
"stuff": "{\"date\":\"2018-01-08\"}"
}
% cat stuff.json | jq '.stuff'
"{\"date\":\"2018-01-08\"}"
% cat stuff.json | jq '.stuff' | jq .
"{\"date\":\"2018-01-08\"}"
अपडेट :
अगर मैंने वास्तविक jq अभिव्यक्ति के साथ उस अंतिम आउटपुट को संसाधित करने की कोशिश की, तो यह कुछ इस तरह करता है:
% cat stuff.json | jq '.stuff' | jq '.date'
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
Aborted (core dumped)
echo $(jq statement here)
?
jq
प्राप्त करने के लिए उपयोग करते हैं, तो क्या यह उसे वापस कर देता है? यदि ऐसा है, तो बस एक ताजा में पाइप करें ।jq