【问题标题】:Embedding JSON Data into YAML file将 JSON 数据嵌入 YAML 文件
【发布时间】:2012-03-20 22:18:12
【问题描述】:

我正在为我的桌子写一个固定装置。其中一个列接受 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'.....

对此的任何解决方案。

【问题讨论】:

  • 你有准确的问题文件的粘贴吗?您使用的是哪个处理器?错误报告是你有一个 TAB 字符,所以这是一个非常具体的问题。

标签: ruby-on-rails ruby ruby-on-rails-3 json yaml


【解决方案1】:

| 也是可能的。例如。

MyObject:
  type: object
  example: |
    {
        "id": 54,
        "manufacturer": "ACME",
        "location": "New York",
        "createdAt": "2012-10-01 07:42:35.825565",
        "description": "test",
    }

【讨论】:

    【解决方案2】:

    在我的表中,列 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"}'
    

    【讨论】:

      【解决方案3】:

      为了完整起见:如果您使用 ActiveRecord::Store,您可以简单地使用相同数据的 YAML 表示来加载数据,即使它是 JSON 存储:

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

      【讨论】:

        【解决方案4】:

        如果你有字符串,你可以像 Vlad Khomich 提到的那样简单地使用:

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

        如果你使用的是 ERB 并且有一个对象,你可以使用 to_json 和 inspect 转义到一个 JSON 字符串:

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

        如果你有一个大型 JSON 规范,你可以将它存储在一个单独的文件中并使用 Ruby 加载,这样你就可以保持你的 YAML 文件干净:

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

        【讨论】:

          【解决方案5】:

          clarkevans 对已接受答案的评论建议对较长的 JSON 位提供更好的答案,因为您可以换行。我查看了他提到的块标量语法,并认为我会在此处包含一个示例:

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

          【讨论】:

          • play.golang.org/p/XkVEeVqakNv 我正在尝试这个,但不适合我
          • 这行得通。但是在 YAML 中有没有一种方法可以引用外部 JSON 文件并将其设置为 YAML 中的值?
          • 任何人都知道如何在 yaml 文件中引用外部 JSON 文件。此外,上面的内部 JSON 对我有用。
          【解决方案6】:

          我相信把它放在引号里应该可以解决问题:

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

          【讨论】:

          • 这使得值成为一个字符串,所以它不是真正的嵌入。如果你想这样做,我会使用块标量和缩进。
          • 字符串是标量类型,但我明白你的意思。
          • 是的,多行 JSON 呢?
          猜你喜欢
          • 2019-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-26
          • 1970-01-01
          相关资源
          最近更新 更多