Ruby 2.2.5 哈希模型错误
Ruby 2.2.5 error on hash mockup
我正在尝试模拟一个在顶层仅使用 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
如果您删除 alpha_tests
和 beta_tests
部分,您的散列是这样的:
tcm = { \
:tc => \
{ \
:tests => \
{ \
}, \
{ \
:test_session => 1293823 \
} \
} \
}
在这种情况下 :tests => {}, {}
不是有效的 Ruby 散列。您可以使用数组 :tests => [ {}, {} ]
顺便说一句,所有这些反斜杠都不是必需的,您还可以使用新的 ruby 哈希样式({test_session: 1293823}
而不是 {:test_session => 129823}
)更简洁地编写此代码,因此您的代码可能看起来像:
tcm = {
tc: {
tests: [
{ ... },
{
test_session: 1293823
}
]
}
}
我看到你漏了一个键的问题:
{ \
: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
我正在尝试模拟一个在顶层仅使用 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
如果您删除 alpha_tests
和 beta_tests
部分,您的散列是这样的:
tcm = { \
:tc => \
{ \
:tests => \
{ \
}, \
{ \
:test_session => 1293823 \
} \
} \
}
在这种情况下 :tests => {}, {}
不是有效的 Ruby 散列。您可以使用数组 :tests => [ {}, {} ]
顺便说一句,所有这些反斜杠都不是必需的,您还可以使用新的 ruby 哈希样式({test_session: 1293823}
而不是 {:test_session => 129823}
)更简洁地编写此代码,因此您的代码可能看起来像:
tcm = {
tc: {
tests: [
{ ... },
{
test_session: 1293823
}
]
}
}
我看到你漏了一个键的问题:
{ \
: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