YAML में संकेतक वर्ण (यानी: या -) से कैसे बचें


241

एक विन्यास फाइल में, मेरे पास एक कुंजी है जिसके लिए मैं एक URL निर्दिष्ट करना चाहता हूं। समस्या यह है कि YAML व्याख्या करता है: - और - या तो मैपिंग या सूची बनाने के रूप में वर्ण, तो यह लाइन के साथ एक समस्या है

url: http://www.example-site.com/

(दोनों http और निम्न के बीच के कोलन के कारण)

क्या ':' और '-' से बचने का कोई स्पष्ट तरीका है? या यह सिर्फ एक उद्धरण में पूरी बात डालने और एक दिन कॉल करने के लिए काम करेगा?


जवाबों:


232

उल्लेख। उद्धरण:

"url: http://www.example-site.com/"

स्पष्ट करने के लिए, मेरा मतलब था "मूल्य उद्धृत करें" और मूल रूप से सोचा कि पूरी चीज का मूल्य था। यदि http://www.example-site.com/मूल्य है, तो बस इसे इस तरह उद्धृत करें:

url: "http://www.example-site.com/"

30
यह स्पष्ट रूप से पार्सर पर निर्भर करता है। यह Jekyll YAML के साथ काम नहीं किया।
पोटोमाटो

1
YAMLDotNet भी उद्धरण प्रदान करता है।
Dr1Ku

कुछ भी बेहतर नहीं? क्योंकि तब उद्धरणों को स्वयं से बचने की आवश्यकता होती है, जो समस्या को हल नहीं करता है, लेकिन बस इसे आगे बढ़ाता है ...
अगस्तिन रीडिंगर

2
ठीक है, यह मार्कडाउन की तरह ही एक त्रुटि-प्रूफ दस्तावेज़ के लिए बहुत ठंडा होगा, इसलिए टीम के गैर-तकनीकी लोग इसे संपादित कर सकते हैं (जैसे रेल में स्थानीय फ़ाइलें) इसे तोड़ने के जोखिम के बिना!
ऑगस्टिन रीडिंजर

1
@ivan_pozdeev: उद्धरण पूरे स्ट्रिंग के आसपास जाते हैं। - 'PS4="+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }"'
Ry-

182

क्या काम करता है और लंबे समय तक, बहुस्तरीय ग्रंथों के लिए भी अच्छा होता है, एक पाइप या अधिक से अधिक हस्ताक्षर के बाद, अपने पाठ को अगली पंक्ति में इंडेंट कर रहा है:

text: >
    Op dit plein stond het hoofdkantoor van de NIROM: Nederlands Indische 
    Radio Omroep

एक पाइप नई लाइनों को संरक्षित करता है, एक gt-sign सभी निम्नलिखित पंक्तियों को एक लंबे स्ट्रिंग में बदल देता है।


6
... और अंत में एक नई पंक्ति जोड़ी जाती है, जो आमतौर पर वह नहीं होती जो आप चाहते हैं।
equaeghe

51
@equaeghe: इसे रोकने के लिए आप इसका उपयोग कर सकते हैं >-या कर सकते हैं |-
dtoux

4
यह एक अद्भुत उपाय है। पूरी तरह से अपने पाठ में अन्य पात्रों से बचने के लिए बचा जाता है। +++ 90000 अंक
बेनेलिच

क्या यह संभव है कि किसी तरह मल्टीलाइन की सूची हो? मैंने कोशिश की है, - >लेकिन पहले अनदेखा किए जाने के बाद आइटम।
ffghfgh

3
@ffghfgh - तत्काल! मैं यह पता नहीं लगा सकता कि टिप्पणी में कोड को ठीक से कैसे प्रारूपित किया जाए और अब मैं मूल टिप्पणी को संपादित नहीं कर सकता। असल में, मैंने एक पाइप के साथ एक सूची आइटम का उपयोग किया, इस तरह: - |और फिर एक नई पंक्ति पर मैंने सूची आइटम पाठ को इंडेंट किया ताकि पहला पात्र पाइप के साथ पंक्तिबद्ध हो। मुझे आशा है कि मदद करता है, यह मेरे लिए एक रेल 4.2 लोकेल फ़ाइल में काम किया।
स्पैकमैन

51

YAML कल्पना के अनुसार, न तो :है और न ही -एक समस्या नहीं होनी चाहिए। :इसके बाद एक स्थान के साथ केवल एक महत्वपूर्ण विभाजक है, और -इसके बाद एक स्थान के साथ एक पंक्ति की शुरुआत में केवल एक सरणी संकेतक है।

लेकिन अगर आपके YAML कार्यान्वयन में कोई समस्या है, तो आपके पास संभावित रूप से बहुत सारे विकल्प हैं:

- url: 'http://www.example-site.com/'
- url: "http://www.example-site.com/"
- url:
    http://www.example-site.com/
- url: >-
    http://www.example-site.com/
- url: |-
    http://www.example-site.com/

हालांकि, स्पष्ट रूप से " सादे शैली " में भागने का कोई रूप नहीं है ।


1
ट्रैविसी के लिंटर ने कॉलोन के बारे में असामान्य रूप से शिकायत की - lint.travis-ci.org
koppor

ट्रैविस सीआई के लिए, ऐसा लगता है कि एकल उद्धरण के अंदर कॉलोन ठीक हैं।
माल्विनस

30

उद्धरण, लेकिन मैं उन्हें सिर्फ मूल्य पर पसंद करता हूं:

url: "http://www.example.com/"

उन्हें पूरी लाइन में लगाने से ऐसा लग रहा है कि यह समस्या पैदा कर सकता है।


21

Jekyll में इस्तेमाल किए जाने वाले YAML पार्सर के साथ काम करने का एक और तरीका:

title: My Life: A Memoir

रिक्त स्थान का अनुसरण नहीं करने वाले कोलों को दूसरी ओर जेकेल के YAML पार्सर परेशान नहीं करते हैं। न ही डैश।


... YAML का चरित्र संस्थाएं हिस्सा हैं? और क्या Jekyll वास्तव में YAML का उपयोग करता है?
Ry-

Jekyll इसका उपयोग करने का दावा करता है: jekyllrb.com/docs/frontmatter मैं YAML कल्पना में चरित्र संस्थाओं के बारे में कुछ भी नहीं पा सकता हूं, इसलिए मुझे संदेह है कि Jekyll अबाध है, लेकिन मुझे लगता है कि यह जवाब लोगों के लिए अच्छी तरह से काम करता है "yaml एस्केप colon" मुझे ;-)
पोटोमाटो

4

यदि आप @ConfigurationPropertiesस्प्रिंग बूट 2 के साथ कुंजियों वाले मानचित्रों को इंजेक्ट करने के लिए उपयोग कर रहे हैं , जिसमें कॉलोन होते हैं, तो आपको कोट के अंदर चौकोर कोष्ठक का उपयोग करके भागने के अतिरिक्त स्तर की आवश्यकता होती है क्योंकि वसंत केवल अल्फ़ान्यूमेरिक और '-' वर्णों को छोड़ देता है। आपकी नई कुंजी इस तरह दिखाई देगी:

"[8.11.32.120:8000]": GoogleMapsKeyforThisDomain

संदर्भ के लिए इस github मुद्दे को देखें ।


यह मेरे वर्तमान उपयोग के मामले में सबसे अधिक मददगार है। धन्यवाद
आनंद

2

मैं अपने Azure DevOps कमांड लाइन कार्य को प्राप्त करने की कोशिश कर रहा था। मेरे लिए काम करने वाली चीज़ पाइप ( |) वर्ण का उपयोग कर रही थी । उपयोग करने से >काम नहीं चला।

उदाहरण:

steps:
- task: CmdLine@2
  inputs:
    script: |
      echo "Selecting Mono version..."
      /bin/bash -c "sudo $AGENT_HOMEDIRECTORY/scripts/select-xamarin-sdk.sh 5_18_1"
      echo "Selecting Xcode version..."
      /bin/bash -c "echo '##vso[task.setvariable variable=MD_APPLE_SDK_ROOT;]'/Applications/Xcode_10.2.1.app;sudo xcode-select --switch /Applications/Xcode_10.2.1.app/Contents/Developer"

मैंने उसी चीज का इस्तेमाल किया .gitlab-ci.yml, लेकिन जब तक मुझे पाइप की जरूरत नहीं पड़ी '' स्क्रिप्ट में - यह उस पर चुपचाप विफल रहता है :(
डालीबोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.