PowerShell [डुप्लिकेट] का उपयोग करके JQ में स्ट्रिंग शाब्दिक

Nov 30 2020

मुझे Powershell से काम करने के लिए JQ स्ट्रिंग शाब्दिक नहीं मिल सकते हैं। उदाहरण के लिए, यह बैश में एक सुंदर JSON ऑब्जेक्ट को आउटपुट करता है, लेकिन पॉवर्स में विफल रहता है:

PS C:\temp> jq --null-input '{"key":"val"}'

jq: error: val/0 is not defined at <top-level>, line 1:
{key:val}
jq: 1 compile error

पहले मुझे गलत उद्धरण का संदेह था, लेकिन जैसा कि मैं उम्मीद करता हूं कि Write-Output '{"key":"val"}'आउटपुट {"key":"val"}

मैं एक फ़ाइल में अपने JQ फ़िल्टर लिखकर इसके चारों ओर काम कर सकता हूं। .NET का उपयोग करके WriteAllTextयह सुनिश्चित करता है कि फ़ाइल बिना BOM के UTF-8 के रूप में एन्कोड हो जाए।

PS C:\temp> [System.IO.File]::WriteAllText('basic.jq', '{"key":"val"}')
PS C:\temp> jq --null-input --from-file basic.jq
{
  "key": "val"
}

मैं JQ फ़िल्टर को प्रोटोटाइप करने और PowerShell स्क्रिप्ट्स में उन्हें एकीकृत करने के लिए अधिक फुर्तीला दृष्टिकोण की तलाश कर रहा हूं।

संस्करण: J64 1.6 win64 के लिए, PSVersion 5.1.18362.1171

जवाब

1 Inian Nov 30 2020 at 21:20

पॉवर्सशेल आपको '..'एक्सप्रेशन के अंदर डबल-कोट्स से बचना चाह सकता है । प्रयत्न

jq --null-input '{ "key": \"val\" }'

या नीचे के प्रमुख नामों के रूप में jqएक स्पष्ट उद्धरण की आवश्यकता नहीं है

jq --null-input '{ key: \"val\" }'

के jqतहत मैनुअल से - चालान जक

विंडोज कमांड शेल ( cmd.exe) का उपयोग करते समय कमांड-लाइन ( -f program-fileविकल्प के बजाय ) पर दिए जाने पर अपने jq प्रोग्राम के आसपास दोहरे उद्धरण चिह्नों का उपयोग करना सबसे अच्छा है , लेकिन तब jq प्रोग्राम में डबल-कोट्स को बैकस्लैश भागने की आवश्यकता होती है।