无法在测试中正确解析 JSON fixture
Can't correctly parse JSON fixture in tests
我在一个旧的 Rails 应用程序 (3.2.22) 中使用 Test::Unit,我正在尝试测试一个服务 class,它会访问外部 api.
我正在使用 webmock 并试图让 json 文件装置正常工作,但我不断收到来自 json 文件的解析错误。
我的测试存根如下所示:
response_data = fixture_file_upload('easypost/order_response.json')
stub_request(:post, 'https://api.easypost.com/v2/orders').
to_return(:status => 200, :body => File.read(response_data))
我的 order_response.json
文件如下所示:
{
'mode':'test',
'reference':'Order',
'is_return':false,
'options':{'currency':'USD','label_date':null}
}
当我 运行 测试时,我得到一个解析错误:
JSON::ParserError: 757: unexpected token at '{'mode':'test','reference':'Order','is_return':false,'options':{'currency':'USD','label_date':null}}'
这是怎么回事?
更新:
通过在 JSON 文件中使用双引号使其工作:
{
"mode":"test",
"reference":"Order",
"is_return":false,
"options":{"currency":"USD","label_date":null}
}
谁能解释为什么这是必要的?
A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes.
and 和 object 是一组 key/value 对,其中键是字符串:
这意味着:
{
'mode':'test',
'reference':'Order',
'is_return':false,
'options':{'currency':'USD','label_date':null}
}
不是 JSON 因为 JSON 字符串使用双引号而且只使用双引号,这有点像 JSON。当您将字符串切换为双引号时:
{
"mode":"test",
"reference":"Order",
"is_return":false,
"options":{"currency":"USD","label_date":null}
}
那么你 JSON 一切都应该正常。
This is to make it simpler and to avoid having to have another escape method for javascript reserved keywords
我认为这个 post 可能有助于理解引用的必要性(以及我在哪里找到上面的引用):JSON Spec - does the key have to be surrounded with quotes?
我在一个旧的 Rails 应用程序 (3.2.22) 中使用 Test::Unit,我正在尝试测试一个服务 class,它会访问外部 api.
我正在使用 webmock 并试图让 json 文件装置正常工作,但我不断收到来自 json 文件的解析错误。
我的测试存根如下所示:
response_data = fixture_file_upload('easypost/order_response.json')
stub_request(:post, 'https://api.easypost.com/v2/orders').
to_return(:status => 200, :body => File.read(response_data))
我的 order_response.json
文件如下所示:
{
'mode':'test',
'reference':'Order',
'is_return':false,
'options':{'currency':'USD','label_date':null}
}
当我 运行 测试时,我得到一个解析错误:
JSON::ParserError: 757: unexpected token at '{'mode':'test','reference':'Order','is_return':false,'options':{'currency':'USD','label_date':null}}'
这是怎么回事?
更新:
通过在 JSON 文件中使用双引号使其工作:
{
"mode":"test",
"reference":"Order",
"is_return":false,
"options":{"currency":"USD","label_date":null}
}
谁能解释为什么这是必要的?
A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes.
and 和 object 是一组 key/value 对,其中键是字符串:
这意味着:
{
'mode':'test',
'reference':'Order',
'is_return':false,
'options':{'currency':'USD','label_date':null}
}
不是 JSON 因为 JSON 字符串使用双引号而且只使用双引号,这有点像 JSON。当您将字符串切换为双引号时:
{
"mode":"test",
"reference":"Order",
"is_return":false,
"options":{"currency":"USD","label_date":null}
}
那么你 JSON 一切都应该正常。
This is to make it simpler and to avoid having to have another escape method for javascript reserved keywords
我认为这个 post 可能有助于理解引用的必要性(以及我在哪里找到上面的引用):JSON Spec - does the key have to be surrounded with quotes?