Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails中的JSON响应_Ruby On Rails_Ruby_Json - Fatal编程技术网

Ruby on rails Rails中的JSON响应

Ruby on rails Rails中的JSON响应,ruby-on-rails,ruby,json,Ruby On Rails,Ruby,Json,我正在为我的大学项目使用一个API,它向我发送多个响应,这些响应都是有效的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",

我正在为我的大学项目使用一个API,它向我发送多个响应,这些响应都是有效的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"
  } 
  ]
它们在response.body中都被视为字符串,因此我需要将它们解析为JSONruby对象

第一个通过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"
  } 
  ]
问候,


Babar

通过和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应该如下所示(我在这里显示第一个)


(在任何地方都能成功解析)。

使用
eval
解析来自外部源的数据是一个坏主意,因为它会打开直接代码执行漏洞

对于解析JSON,有一个内置解析器:

require 'json'
ruby_object = JSON.load(your_json_string)
为了提高速度,如果需要,可以直接或通过
MultiJson
gem使用专用的json解析器gem,如
oj


另外,您的第二个json缺少最后一个
}
,因此无效,json中的哈希键也应该位于

我使用了JSlint,它显示为一个有效的JSON对象,但是它不符合某些RFC。让我测试一下您的建议。@Babar因为它不是有效的json,如果API中的错误失控,但一致,您可以将响应修改为字符串来更正它