66 votes

Incorporation de données JSON dans un fichier YAML

Je suis en train d'écrire une fixation pour ma table. Et l'une des couleurs prend une chaîne JSON comme valeur.

Le problème est que la fixation ne se charge pas en échouant comme :

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'.....

Toute solution à ce problème.

84voto

Vlad Khomich Points 3296

Je pense que le fait de 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 suggérait une meilleure réponse pour les longs morceaux de JSON, car on peut 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 ficelle, vous pouvez l'utiliser aussi simplement 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 inspect pour vous échapper vers 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

Pour le plaisir d'être complet : Au cas où vous utiliseriez ActiveRecord::Store vous pouvez charger vos données en utilisant simplement la représentation YAML de ces 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 mon tableau, la colonne stripe_connect est de type JSONB . Dans le dispositif, voici ce qui a fonctionné. Notez que les guillemets simples extérieurs sont nécessaires, mais pas les crochets. Tout ce qui se trouve 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