J'ai un petit script pour automatiser certaines choses dans les fichiers YAML.
J'ai lu le fichier YAML d'origine et le convertir en hachage puis Dump au fichier après la modification: P>
File.open(output_file, "w") do |out| YAML.dump(modified_hash, out) end
3 Réponses :
J'ai trouvé une solution, c'est bizarre, mais ça marche. P>
forcer Pour forcer Notez que vous voulez probablement choisi quelque chose de moins probable utilisé que FOOBAR. P> "foobar" code> (notez l'espace) à chaque valeur. Après avoir utilisé
yaml.dump code>, j'ai ouvert le fichier à nouveau et remplacé
"foobar" code> avec une chaîne vide. P>
"foo \ nbar" code> fait le travail. Encore une fois, j'ouvre ensuite le fichier et remplacer
"foo \\ nbar" code> avec la chaîne vide. Weird, mais fonctionne. P>
Voici une version rubis de la réponse de @ Jomo, pour la référence future de toute personne: Il charge la YAML à partir d'un fichier, ajoute récursivement la chaîne de citation magique à toutes les valeurs d'un objet YAML , puis décharge que Yaml vers le même fichier, puis utilise sed code> pour supprimer les occurrences de la chaîne magique du fichier de sortie. P> P>
Cela fonctionne assez bien. Je l'ai eu de ici
require 'psych' ast = Psych.parse_stream DATA.read # First pass, quote everything ast.grep(Psych::Nodes::Scalar).each do |node| node.plain = false node.quoted = true node.style = Psych::Nodes::Scalar::DOUBLE_QUOTED end # Second pass, unquote keys ast.grep(Psych::Nodes::Mapping).each do |node| node.children.each_slice(2) do |k, _| k.plain = true k.quoted = false k.style = Psych::Nodes::Scalar::ANY end end puts ast.yaml
Pour quelqu'un d'autre qui a besoin de passer des options sur ast.yaml code>, comme la largeur de la ligne, transmettez-les comme le deuxième argument:
ast.yaml (nil, {line_width: -1}) Code> (voir ruby-doc.org/stdlib-2.7.2/libdoc/psyss /rdoc/psych/nodes/... )
Les citations facultatives sont comme, l'une des trois grandes différences de Yaml à JSON. Le troisième est une nuisance attrayante et vous ne l'utilisez probablement pas. Peut-être que vous pourriez juste Json?
Non, malheureusement, je suis obligé d'utiliser Yaml. J'allais aussi bien avec un outil externe qui ajoute les citations automatiquement
JSON est un sous-ensemble YAML (entièrement pour YAML 1.2, pratiquement entièrement pour les versions antérieures).
Vous devez probablement utiliser un émetteur personnalisé psych. Voir aussi psych :: nœuds :: scalaire et psych :: gestionnaire # scalaire.
Actuellement, j'ai l'idée d'ajouter des symboles étranges qui sont peu susceptibles d'utiliser (comme "☙") à chaque valeur et de marcher ultérieurement dans le fichier déversé et de remplacer ces symboles avec une chaîne vide. Ce serait une méthode étrange, mais cela fonctionnera probablement pour ajouter des citations autour des valeurs.