Cara keluar dari karakter indikator (yaitu: atau -) di YAML


241

Dalam file konfigurasi, saya memiliki kunci yang ingin saya tetapkan URL. Masalahnya adalah bahwa YAML mengartikan: dan - karakter sebagai pembuatan pemetaan atau daftar, sehingga memiliki masalah dengan garis

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

(keduanya karena titik dua berikut http dan tanda hubung di tengah)

Apakah ada cara eksplisit untuk melarikan diri ':' dan '-'? Atau akankah itu berhasil menempatkan semuanya dalam tanda kutip tunggal dan menyebutnya sehari?


Jawaban:


232

Tanda kutip:

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

Untuk memperjelas, saya maksudkan "mengutip nilai" dan awalnya berpikir semuanya adalah nilai. Jika http://www.example-site.com/nilainya, cukup kutip seperti ini:

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

30
Tergantung pada parser, rupanya. Ini tidak bekerja dengan Jekyll YAML.
ptomato

1
YAMLDotNet juga memberikan penawaran.
Dr1Ku

Tidak ada yang lebih baik? Karena itu kutipan perlu untuk melarikan diri sendiri, yang tidak menyelesaikan masalah tetapi hanya bergerak maju ...
Augustin Riedinger

2
Yah, akan jauh lebih keren untuk memiliki dokumen bukti kesalahan, seperti penurunan harga, sehingga orang-orang non-teknologi dari tim dapat mengeditnya (mis. File lokal di Rails) tanpa risiko memecahnya!
Augustin Riedinger

1
@ivan_pozdeev: Kutipan mengelilingi seluruh string. - 'PS4="+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }"'
Ry-

183

Yang juga berfungsi dan bahkan lebih bagus untuk teks multiline yang panjang, adalah menempatkan teks Anda di lekukan di baris berikutnya, setelah tanda pipa atau lebih besar dari:

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

Sebuah pipa mempertahankan baris baru, sebuah tanda gt mengubah semua baris berikut menjadi satu string panjang.


6
... dan baris baru ditambahkan di akhir, yang biasanya bukan yang Anda inginkan.
equaeghe

51
@ equaeghe: Anda dapat menggunakan >-atau |-untuk mencegahnya.
dtoux

4
Ini solusi luar biasa. Sepenuhnya menghindari keharusan melarikan diri karakter lain dalam teks Anda. +++ 90000 poin
bennlich

mungkinkah memiliki daftar multiline entah bagaimana? Saya sudah mencoba - >tetapi item setelah yang pertama diabaikan.
ffghfgh

3
@ fghfgh - desak! Saya tidak tahu cara memformat kode dengan benar di komentar dan sekarang saya tidak dapat mengedit komentar asli. Pada dasarnya, saya menggunakan item daftar dengan pipa, seperti ini: - |dan kemudian pada baris baru saya membuat indentasi teks item daftar sehingga karakter pertama berbaris dengan pipa. Saya harap itu membantu, itu berhasil bagi saya dalam file lokal Rails 4.2.
Spakman

51

Menurut spec YAML, baik :yang -seharusnya maupun yang seharusnya tidak menjadi masalah. :hanya pemisah kunci dengan spasi setelahnya, dan -hanya indikator larik di awal baris dengan spasi setelahnya.

Tetapi jika implementasi YAML Anda memiliki masalah dengannya, Anda berpotensi memiliki banyak opsi:

- 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/

Namun, tidak ada bentuk pelarian yang mungkin dilakukan dalam " gaya polos ".


1
Pecinta travisCI mengeluh tentang titik dua yang tidak biasa - lint.travis-ci.org
koppor

Untuk Travis CI, tampaknya titik dua di dalam tanda kutip tunggal OK.
Malvineous

30

Kutipan, tapi saya lebih suka mereka hanya pada nilai:

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

Menempatkan mereka di seluruh baris sepertinya dapat menyebabkan masalah.


21

Cara lain yang bekerja dengan parser YAML yang digunakan di Jekyll:

title: My Life: A Memoir

Colon yang tidak diikuti oleh spasi tampaknya tidak mengganggu parser YAML Jekyll, di sisi lain. Tidak ada tanda hubung.


... Apakah entitas karakter bagian dari YAML? Dan apakah yang sebenarnya digunakan Jekyll sebagai YAML?
Ry-

Jekyll mengklaim untuk menggunakannya: jekyllrb.com/docs/frontmatter Saya tidak dapat menemukan apa pun tentang entitas karakter dalam spesifikasi YAML, jadi saya curiga Jekyll adalah orang yang menyimpang, tetapi saya pikir jawaban ini berfungsi dengan baik untuk orang-orang Googling "yaml escape colon" seperti saya ;-)
ptomato

4

Jika Anda menggunakan @ConfigurationPropertiesdengan Spring Boot 2 untuk menyuntikkan peta dengan kunci yang berisi titik dua maka Anda perlu tingkat tambahan untuk melarikan diri menggunakan tanda kurung di dalam tanda kutip karena pegas hanya memungkinkan karakter alfanumerik dan '-', menghapus sisanya. Kunci baru Anda akan terlihat seperti ini:

"[8.11.32.120:8000]": GoogleMapsKeyforThisDomain

Lihat masalah github ini untuk referensi.


Ini adalah yang paling membantu dalam kasus penggunaan saya saat ini. Terima kasih
anand

2

Saya datang ke sini mencoba untuk mendapatkan tugas Command Line Azure DevOps saya bekerja. Hal yang berhasil bagi saya adalah menggunakan karakter pipe ( |). Penggunaan >tidak berhasil.

Contoh:

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"

Saya menggunakan hal yang sama .gitlab-ci.yml, tetapi sampai saya membutuhkan pipa '|' dalam skrip - gagal diam-diam di atasnya :(
Dalibor
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.