0

我正在尝试模拟一个在顶层仅使用 1 个或 2 个已知键名动态生成的哈希,因此我可以对其进行测试,以期将其转换为嵌套的 JSON。这就是我正在使用的:

ruby.exe -v

ruby 2.2.5p319 (2016-04-26 revision 54774) [i386-mingw32]

不过,我遇到了解析问题,我不确定为什么,或者我到底做错了什么。我真的不知道我的限制是什么,但这似乎是一个基本的格式问题。但是,在过去的 10 分钟里我一直对此视而不见,所以也许有一些潜在的问题?到目前为止,这是我的整个应用程序:

tcm = { \
        :tc => \
        { \
            :tests => \
            { \
                :alpha_tests => \
                { \
                    :passing_tests => {}, \
                    :failing_tests => \
                    { \
                        :alpha_test_1 => {:name => "alpha_test_1", :result => "FAILED"}, \
                        :alpha_test_2 => {:name => "alpha_test_2", :result => "FAILED"} \
                    } \
                }, \
                :beta_tests => \
                { \
                    :passing_tests => \
                    { \
                        :beta_test_1 => {:name => "beta_test_1", :result => "PASSED"} \
                    }, \
                    :failing_tests => \
                    { \
                        :beta_test_2 => {:name => "beta_test_2", :result => "FAILED"} \
                    } \
                } \
            }, \
            { \
                :test_session => 1293823 \
            } \
        } \
    }

puts tcm
4

2 回答 2

2

我看到你错过了一个关键的问题:

{ \
  :test_session => 1293823 \
} \

应该

:some_key => { \
  :test_session => 1293823 \
} \

而且它的格式很奇怪。更好的是

tcm = {
  tc: {
    tests: {
      alpha_tests: {
        passing_tests: {},
        failing_tests: {
          alpha_test_1: { name: 'alpha_test_1', result: 'FAILED' },
          alpha_test_2: { name: 'alpha_test_2', result: 'FAILED' }
        }
      },
      beta_tests: {
        passing_tests: {
          beta_test_1: { name: 'beta_test_1', result: 'PASSED' }
        },
        failing_tests: {
          beta_test_2: { name: 'beta_test_2', result: 'FAILED' }
        }
      }
    },
    key_to_fix: {
      test_session: 1_293_823
    }
  }
}

puts tcm
于 2017-04-13T04:34:12.613 回答
1

如果你删除alpha_testsbeta_tests部分你的哈希是这样的:

tcm = { \
        :tc => \
        { \
            :tests => \
            { \
            }, \
            { \
                :test_session => 1293823 \
            } \
        } \
    }

在这种情况下:tests => {}, {},它不是有效的 Ruby 哈希。你可以使用一个数组:tests => [ {}, {} ]

顺便说一句,所有这些反斜杠都不是必需的,您也可以使用新的 ruby​​ 哈希样式({test_session: 1293823}而不是{:test_session => 129823})更简洁地编写它,因此您的代码可能如下所示:

tcm = {
        tc: { 
              tests: [ 
                       { ... },
                       {
                          test_session: 1293823
                       }
                     ]
            }   
      }
于 2017-04-13T04:32:55.463 回答