我正在为我的大学项目使用API,它向我发送了多个响应,这些响应都是有效的JSON。
两者都被视为 response.body 中的字符串,因此我需要将它们解析为 JSON 或 ruby对象。
第一个通过JSON解析器但是如果我使用eval
返回 ruby对象
{
apiCode: "SUCCESS",
friendlyMessage: "All information saved successfully"
}
第二个通过eval并给我一个有效的Ruby对象,但作为有效的JSON失败。
{
apiCode: "SUCCESS_WITH_ERRORS",
friendlyMessage: "Some of the information was not processed",
successfulIds: [
{
ssid: "My Test 1",
bssid: "2d:8c:e5:5c:bb:b9"
},
{
ssid: "My Test 2",
bssid: "2a:7d:a4:5c:aa:a7"
}
]
此致
巴巴尔
答案 0 :(得分:1)
通过JSON Lint和Ruby的JSON
库运行JSON blob会导致错误。
第一个错误是
Error: Parse error on line 1:
{ apiCode: "SUCCESS",
--^
Expecting 'STRING', '}', got 'undefined'
,第二个是
Error: Parse error on line 1:
{ apiCode: "SUCCESS_WI
--^
Expecting 'STRING', '}', got 'undefined'
错误表明你的JSON应该是这样的(我在这里展示了第一个)
{
"apiCode": "SUCCESS",
"friendlyMessage": "All information saved successfully"
}
(在任何地方成功解析)。
答案 1 :(得分:1)
使用eval
解析来自某些外部源的数据是一个坏主意,因为会打开一个直接的代码执行漏洞。
对于解析JSON,有一个内置解析器:
require 'json'
ruby_object = JSON.load(your_json_string)
为了提高速度,如果需要,请直接或通过oj
gem使用专用的json解析器gem MultiJson
。
另外你的第二个json缺少最后的}
因此无效,json中的哈希键应该在"