web-dev-qa-db-fra.com

Comment échapper aux deux points et autres caractères spéciaux d'une chaîne YAML?

J'ai le fragment YAML suivant:

description: |
  "API for bean consuming applications.
  Examples: painted pony, lima bean"

éditeur Swagger interprète les deux points (:) en tant que caractère spécial, malgré les guillemets.

Selon la réponse acceptée à cette question , les deux points ne doivent pas être traités comme des caractères spéciaux.

Est-ce un bug de Swagger ou une séquence d'échappement est-elle nécessaire pour utiliser les deux points dans les littéraux de texte cités?

J'ai essayé de le savoir en utilisant le spécification YAML mais j'ai abandonné.

Comment dois-je lire cette spécification pour répondre à la question?

Y a-t-il une différence entre guillemets simples (') et les guillemets doubles (") en YAML?

Est-ce que le tuyau (|) ou le plus grand que (>) la construction n’influence-t-elle que la gestion des sauts de ligne ou des caractères spéciaux?

26
Gustave

Je considérerais cela comme un bogue dans swagger, mais j’ai vu des problèmes chez d’autres éditeurs, par exemple. lors de la mise en évidence de YAML.

Quand une chaîne scalaire est entourée par guillemets simples'....' la seule opération pouvant être effectuée dans cette chaîne consiste à insérer un guillemet simple pour indiquer un guillemet simple:

'It''s a good question'

Quand guillemets doubles , "....", contourne une chaîne scalaire que tu utilises une barre oblique inverse (\) pour vous échapper, et vous devez échapper au moins à la barre oblique inverse et aux guillemets. De plus, vous pouvez échapper à d’autres caractères spéciaux comme le saut de ligne (\n) et échappe à une fin de ligne en la faisant précéder d’une barre oblique inverse.

La spécification YAML indique qu'il y a aucun moyen d'échapper aux caractères dans les scalaires littéraux (commençant par |), vous ne pouvez donc pas insérer de nouvelles lignes ou d’autres séquences d’échappement avec celles-ci.

Pour le style plié (>), le comportement d'échappement est identique à celui des scalaires littéraux.

Tous les scalaires de chaîne, à l'exception des scalaires simples (ceux sans guillemets ni >/|) peut contenir : suivi d’un espace sans problème, et si un éditeur l’interprète différemment, cela est compréhensible (car l’analyse YAML complète est coûteuse), mais elle est incorrecte.

22
Anthon

J'ai eu exactement le même problème et j'ai constaté que l'utilisation du code d'échappement HTML fonctionnait :, et c'est ce à quoi j'ai eu recours.

16
Boris Lutskovsky

S'appuyant sur les réponses déjà fournies dans d'autres commentaires: http://yaml.org/spec/1.2/spec.html#id2788097

Et à partir de ceci: https://yaml.org/spec/1.2/spec.html#id2776092

J'ai trouvé qu'avec toutes les citations, vous pouvez simplement utiliser deux points pour échapper au caractère spécial du colon. c'est à dire. ::

Donc, la description deviendrait:

description: "API for bean consuming applications. Examples:: painted pony, lima bean"

0
RichE