66 votes

Intégration de données JSON dans un fichier YAML

J'écris un luminaire pour ma table. Et l'une des colonnes prend une chaîne JSON comme valeur.

Le problème est que le projecteur ne se charge pas car :

 Fixture::FormatError: a YAML error occurred parsing /home/saurajeet/code/dcbox/test/fixtures/hardware.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Please have a look at http://www.yaml.org/faq.html
The exact error was:
  ArgumentError: syntax error on line 145, col 73: `  portslist: [{"name":"ob1","port_num":0,"port_type":"network"},{"name":"ob2","port_nu'.....

Toutes les solutions à cela.

84voto

Vlad Khomich Points 3296

Je pense que le mettre entre guillemets devrait faire l'affaire:

 portslist: '[{"name":"ob1","port_type" ... }]'

48voto

Paul Lynch Points 185

Le commentaire de clarkevans sur la réponse acceptée a suggéré une meilleure réponse pour les longs morceaux de JSON, car vous pouvez envelopper les lignes. J'ai recherché la syntaxe scalaire de bloc qu'il a mentionnée et j'ai pensé inclure un exemple ici :

 portslist: >
  [{"name":"ob1","port_num":0,"port_type":"network"},
  {"name":"ob2","port_nu...

11voto

Si vous avez la chaîne, vous pouvez utiliser aussi simple que Vlad Khomich l'a mentionné :

 portslist: '[{"name":"ob1","port_num":0,"port_type":"network"},...]'

Si vous utilisez ERB et que vous avez un objet, vous pouvez utiliser to_json et inspecter pour échapper à une chaîne JSON :

 portslist: <%= [{name: 'ob1', port_num: 0, port_type: 'network'},...].to_json.inspect %>

Et si vous avez une grande spécification JSON, vous pouvez la stocker dans un fichier séparé et la charger à l'aide de Ruby, afin de garder votre fichier YAML propre :

 portslist: <%= File.read('/path/to/file.json').inspect %>

8voto

murb Points 40

Par souci d'exhaustivité : si vous utilisez ActiveRecord::Store , vous pouvez simplement charger vos données en utilisant la représentation YAML des mêmes données, même s'il s'agit d'un magasin JSON :

 one:
  portslist:
    - 
      name: 'ob1'
      port_num: 0
      port_type: 'network'
    - 
      name: 'ob2'
      port_num: 1
      port_type: 'network'

2voto

Norm Points 99

Dans ma table, la colonne stripe_connect est de type JSONB . Dans le montage, voici ce qui a fonctionné. Notez que les guillemets simples externes sont nécessaires, mais pas les crochets. Tout entre les guillemets simples est une longue ligne.

  stripe_connect: '{"scope":"read_write", "livemode":false, "token_type":"bearer", "access_token":"sk_test_madeupvalue", "refresh_token":"rt_Ae29madeupvalueyX", "stripe_user_id":"acct_103yZabcdefg", "stripe_publishable_key":"pk_test_0HEOmadeupvalue"}'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X