Встраивание данных JSON в файл YAML - PullRequest
31 голосов
/ 02 марта 2012

Я пишу приспособление для моего стола. И один из столбцов принимает в качестве значения строку JSON.

Проблема в том, что прибор не загружается, как:

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

Любые решения для этого.

Ответы [ 5 ]

41 голосов
/ 02 марта 2012

Я считаю, что взятие его в кавычки должно сработать:

portslist: '[{"name":"ob1","port_type" ... }]'
30 голосов
/ 13 июня 2013

комментарий кларкеванов к принятому ответу предложил лучший ответ для длинных битов JSON, потому что вы можете переносить строки.Я посмотрел упомянутый им скалярный синтаксис блока и подумал, что приведу пример здесь:

portslist: >
  [{"name":"ob1","port_num":0,"port_type":"network"},
  {"name":"ob2","port_nu...
7 голосов
/ 11 марта 2017

Для полноты: если вы используете ActiveRecord::Store, вы можете загрузить свои данные, просто используя YAML-представление тех же данных, даже если это хранилище JSON:

one:
  portslist:
    - 
      name: 'ob1'
      port_num: 0
      port_type: 'network'
    - 
      name: 'ob2'
      port_num: 1
      port_type: 'network'
6 голосов
/ 17 июля 2015

Если у вас есть строка, вы можете использовать так просто, как упомянул Влад Хомич:

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

Если вы используете ERB и у вас есть объект, вы можете использовать to_json и проверить для перехода к строке JSON:

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

И если у вас большая спецификация JSON, вы можете сохранить ее в отдельном файле и загрузить с помощью Ruby, чтобы вы могли сохранить свой файл YAML в чистоте:

portslist: <%= File.read('/path/to/file.json').inspect %>
0 голосов
/ 06 июня 2017

В моей таблице столбец stripe_connect имеет тип JSONB .В приспособлении вот что сработало.Обратите внимание, что внешние одинарные кавычки необходимы, а квадратные скобки - нет.Все, что находится в одинарных кавычках - это одна длинная строка.

 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"}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...