web-dev-qa-db-fra.com

Incorporation 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 luminaire 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.

42
Saurajeet

Je crois que le prendre entre guillemets devrait faire l'affaire:

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

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...
36
Paul Lynch

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 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 que vous puissiez garder votre fichier YAML propre:

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

Pour être complet: dans le cas où vous utilisez ActiveRecord::Store , vous pouvez charger vos données simplement 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'
8
murb

Dans ma table, la colonne stripe_connect est de type JSONB . Dans le luminaire, 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"}'
1
Norm