Rails中的JSON响应

时间:2016-02-07 10:29:57

标签: ruby-on-rails ruby json

我正在为我的大学项目使用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"
  } 
  ]

此致

巴巴尔

2 个答案:

答案 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中的哈希键应该在"