2012-03-02 21 views
23

Piszę urządzenie do mojego stołu. I jeden z kolorów przyjmuje ciąg JSON jako wartość.Umieszczanie danych JSON w pliku YAML

Problemem jest to urządzenie nie ładuje braku jak:

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

żadnych rozwiązań do tego.

+0

Czy masz wkleić dokładnie problematyczny plik? Z jakiego procesora korzystasz? Raport o błędach jest taki, że masz znak * TAB *, więc jest to bardzo specyficzny problem. – clarkevans

Odpowiedz

28

wierzę biorąc go w cudzysłów powinno załatwić sprawę: Komentarz

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

tak oczywiste .. próbowałem wymykając się specjalnym symbolom ... :( – Saurajeet

+2

Powoduje to, że wartość jest ciągiem znaków, więc nie jest to naprawdę osadzanie.Jeśli chcesz to zrobić, użyłabym skalarnego bloku i wcięcia – clarkevans

+0

Ciągi są typ skalarny, ale rozumiem, co masz na myśli. – Thermatix

21

clarkevans' na zaakceptowanej odpowiedzi sugerował lepszą odpowiedź dla długich bitów JSON, ponieważ można zawijać wiersze. Spojrzałem w górę składni blok skalarnego wspominał, a myślałem, że to przykład tutaj:

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

Jeśli masz ciąg, można użyć tak proste, jak wspomniano Vlad Khomich:

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

Jeśli używasz ERB i mieć obiektu, można użyć to_json i wglądu do ucieczki na ciąg JSON:

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

a jeśli masz dużą specyfikację JSON, można przechowywać je w oddzielnej pliku i Obciążenie przy użyciu Ruby, dzięki czemu można zachować swój plik YAML czyste:

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

Dla skompletowany: jeśli używasz ActiveRecord::Store można załadować swoje dane po prostu za pomocą YAML reprezentację tych samych danych, nawet jeśli jest to sklep JSON:

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

W moim tabeli, kolumna stripe_connect jest typu JSONB. W urządzeniu, oto, co zadziałało. Zauważ, że zewnętrzne pojedyncze cudzysłowy są konieczne, ale nawiasy kwadratowe nie są. Wszystko pomiędzy pojedynczymi cytatami to jedna długa linia.

stripe_connect: „{ "zakres": "read_write", "livemode" false "token_type": "na okaziciela", "access_token": "sk_test_madeupvalue", "refresh_token": "rt_Ae29madeupvalueyX", "stripe_user_id": "acct_103yZabcdefg", "stripe_publishable_key": "pk_test_0HEOmadeupvalue"} '