使用 HTTParty 检索 JSON 时出现“嵌套太深”错误

2023-12-15

我正在为 reddit api 编写一个非常简单的代理包装器,这样我就可以发出跨域 JSONP 请求(据我所知,reddit 不允许 JSONP 调用)。

我正在使用 HTTParty gem 发出调用并检索响应,我立即将其渲染为 json。

到目前为止,我正在完美地检索 subreddit json,以此作为我的路线:

  match "r/:name" => "api#subreddit"

...这是我的控制器操作:

def subreddit
    render :json => HTTParty.get("http://www.reddit.com/r/" + params[:name] + "/.json"), :callback => params[:callback]
end

例如,返回的 JSON 类似于:http://www.reddit.com/r/pics/.json

我的问题是当我尝试获取特定线程的评论时。

我的路线是这样的:

match "r/:name/comments/:id" => "api#comments"

...我的控制器操作是这样的:

  def comments
    render :json => HTTParty.get("http://www.reddit.com/r/" + params[:name] + "/comments/" + params[:id] + "/.json"), :callback => params[:callback]    
  end

我想要返回的 JSON 可以在这里看到:http://www.reddit.com/r/pics/comments/rhzgc/.json

但是,当我调用此操作时,我收到以下错误消息:

MultiJson::DecodeError in ApiController#comments
Nesting of 20 is too deep

完整的堆栈跟踪如下:

json (1.6.6) lib/json/common.rb:148:in `parse'
json (1.6.6) lib/json/common.rb:148:in `parse'
multi_json (1.2.0) lib/multi_json/engines/json_common.rb:9:in `decode'
multi_json (1.2.0) lib/multi_json.rb:81:in `decode'
httparty (0.8.1) lib/httparty/parser.rb:116:in `json'
httparty (0.8.1) lib/httparty/parser.rb:136:in `parse_supported_format'
httparty (0.8.1) lib/httparty/parser.rb:103:in `parse'
httparty (0.8.1) lib/httparty/parser.rb:66:in `call'
httparty (0.8.1) lib/httparty/request.rb:222:in `parse_response'
httparty (0.8.1) lib/httparty/request.rb:192:in `handle_response'
httparty (0.8.1) lib/httparty/request.rb:75:in `perform'
httparty (0.8.1) lib/httparty.rb:391:in `perform_request'
httparty (0.8.1) lib/httparty.rb:343:in `get'
httparty (0.8.1) lib/httparty.rb:423:in `get'
app/controllers/api_controller.rb:12:in `comments'
actionpack (3.1.1) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.1.1) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.1.1) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.1.1) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (3.1.1) lib/active_support/callbacks.rb:416:in `_run__2872109728488784816__process_action__2261783022290592822__callbacks'
activesupport (3.1.1) lib/active_support/callbacks.rb:386:in `_run_process_action_callbacks'
activesupport (3.1.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.1.1) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.1.1) lib/action_controller/metal/rescue.rb:17:in `process_action'
actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.1.1) lib/active_support/notifications.rb:53:in `block in instrument'
activesupport (3.1.1) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (3.1.1) lib/active_support/notifications.rb:53:in `instrument'
actionpack (3.1.1) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.1.1) lib/action_controller/metal/params_wrapper.rb:201:in `process_action'
activerecord (3.1.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (3.1.1) lib/abstract_controller/base.rb:121:in `process'
actionpack (3.1.1) lib/abstract_controller/rendering.rb:45:in `process'
actionpack (3.1.1) lib/action_controller/metal.rb:193:in `dispatch'
actionpack (3.1.1) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.1.1) lib/action_controller/metal.rb:236:in `block in action'
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:65:in `call'
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:65:in `dispatch'
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:29:in `call'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:152:in `block in call'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:96:in `block in recognize'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:89:in `optimized_each'
rack-mount (0.8.3) lib/rack/mount/code_generation.rb:95:in `recognize'
rack-mount (0.8.3) lib/rack/mount/route_set.rb:141:in `call'
actionpack (3.1.1) lib/action_dispatch/routing/route_set.rb:532:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.3.6) lib/rack/etag.rb:23:in `call'
rack (1.3.6) lib/rack/conditionalget.rb:25:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/flash.rb:243:in `call'
rack (1.3.6) lib/rack/session/abstract/id.rb:195:in `context'
rack (1.3.6) lib/rack/session/abstract/id.rb:190:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/cookies.rb:331:in `call'
activerecord (3.1.1) lib/active_record/query_cache.rb:62:in `call'
activerecord (3.1.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:477:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (3.1.1) lib/active_support/callbacks.rb:392:in `_run_call_callbacks'
activesupport (3.1.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.1.1) lib/action_dispatch/middleware/callbacks.rb:28:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/reloader.rb:68:in `call'
rack (1.3.6) lib/rack/sendfile.rb:101:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
railties (3.1.1) lib/rails/rack/logger.rb:13:in `call'
rack (1.3.6) lib/rack/methodoverride.rb:24:in `call'
rack (1.3.6) lib/rack/runtime.rb:17:in `call'
activesupport (3.1.1) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.3.6) lib/rack/lock.rb:15:in `call'
actionpack (3.1.1) lib/action_dispatch/middleware/static.rb:53:in `call'
railties (3.1.1) lib/rails/engine.rb:456:in `call'
railties (3.1.1) lib/rails/rack/content_length.rb:16:in `call'
railties (3.1.1) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.3.6) lib/rack/handler/webrick.rb:59:in `service'
/Users/emcummings/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
/Users/emcummings/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
/Users/emcummings/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'

我在这里做错了什么?如果 JSON 太大而无法解析(我觉得很难相信!)我该怎么办?

EDIT:

看起来回到标准 NET::HTTP lib 解决了我的问题:

uri = URI.parse("http://www.reddit.com/r/pics/comments/rhzgc/.json")    
response = Net::HTTP.get_response(uri)
render :json => response.body, :callback => params[:callback]
#OK!

...但我仍然很好奇为什么我对 HTTParty 的同一个调用失败了!

谢谢您的帮助!


并不是JSON太大。嵌套得太深了。HTTParty尝试解码它自动获得的结果。跟踪您的堆栈跟踪,以及HTTParty依赖关系,它依赖于multi_json这是使用json gem.

代替jsonlib/json/pure/parser.rb。默认的最大深度设置在那里设置,特别是在第 79 行。返回的 JSON 中的某些内容深度超过 20 层,从而触发异常。

 if !opts.key?(:max_nesting) # defaults to 19
   @max_nesting = 19
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HTTParty 检索 JSON 时出现“嵌套太深”错误 的相关文章

随机推荐

  • 处理加速度计数据

    我想知道是否有一些库 算法 技术可以帮助从加速度计数据 从任何智能手机中提取 中提取用户上下文 步行 站立 例如 我会在一段时间内每 5 秒收集一次加速度计数据 然后识别用户上下文 例如 前 5 分钟 用户在走路 然后用户站立一分钟 然后他
  • 如何在 lambda 层中本地调试依赖项?

    我正在从 dockerfile 创建一个 lambda 层 它将 python 包安装到一个目录并压缩结果 FROM amazonlinux WORKDIR RUN yum update y Install Python 3 7 RUN y
  • 在字符集之间转换文本文件的最佳方法?

    在字符集之间转换文本文件的最快 最简单的工具或方法是什么 具体来说 我需要从 UTF 8 转换为 ISO 8859 15 反之亦然 一切顺利 用您最喜欢的脚本语言 命令行工具或操作系统 网站等的其他实用程序编写单行代码 迄今为止最好的解决方
  • 有没有办法在单个 npmrc 文件中配置多个注册表

    这是我的问题 我们有一个私人 NPM 注册表 仅适用于 VPN 我想要一个后备注册表https registry npmjs org这样当我退出 VPN 时 它就能无缝运行 P S 目前我正在使用npmrc这在之间的切换方面做得很好 npm
  • 如何将SDL2纹理渲染到GTK3+窗口中?

    我正在创建一个音乐播放器并尝试使用 GTK3 来创建用户界面 我正在使用 SDL CreateWindowFrom 函数让 SDL2 使用 GTK3 窗口而不是创建一个窗口 但无法弄清楚将 SDL2 纹理渲染到 GTK3 窗口中需要遵循的步
  • iOS 9 Facebook 登录模拟器 -canOpenURL:URL 失败:“fbauth2:///” - 错误:“(null)”

    我已更新到 Xcode 7 和最新的 iOS SDK 我已在应用程序的 plist 中添加了适当的条目 我的应用程序的 Facebook 登录在设备上运行良好 然而 在 iOS 9 模拟器上 我得到 canOpenURL failed fo
  • Android:如何使用JobService的JobFinished

    我没有看到使用 JobService 的 jobFinshed 的示例 似乎我们必须在满足某些条件时跟踪更改 我们必须调用jobFinished 方法 我说得对吗 打电话的难度jobFinished 来自另一个班级 例如IntentServ
  • 在画布上绘制图像

    我正在尝试将图像放在画布上 我阅读了以下教程https developer mozilla org en US docs Web Guide HTML Canvas tutorial Using images并尝试做类似的事情 我的画布是
  • 如何从循环中获取 tkinter 条目

    我想制作一个带有多个 tkinter Entry 小部件的程序 我使用 for 循环来制作多个 Entry 小部件 但我怎样才能从中获得价值呢 我的测试代码 from tkinter import root Tk variables ent
  • 设置状态栏色调颜色

    我有一个选项卡式栏应用程序 状态栏色调颜色设置为默认 因此在整个应用程序中它始终是我选择的蓝色 然而 在一种视图中 我隐藏了导航栏 如下所示 self navigationController setNavigationBarHidden
  • 在 mongodb C++ 驱动程序中使用声明“未找到”

    我使用基于 mongo c driver 1 6 2 的 mongo cxx driver r3 1 1 使用github 上提供的最新示例 我设法找到了如何连接数据库以及如何保存文档 我正在努力使用过滤器按照中提供的信息获取结果mongo
  • 有没有办法在等待输入时有一个倒计时器?

    我正在尝试创建一个简单的游戏 在计时器用完之前需要用户输入 基本上 页面会加载一段时间 并等待用户说出正确答案 如果时间用完 游戏就结束 但如果用户答对了 他就会继续下一个问题 我已经解决了演讲部分 我只需要弄清楚计时器 有没有一种简单的方
  • 为什么 img 标签接受 margin-top 属性?

    我想知道为什么img标签接受边距顶部属性吗 这不是内联标签吗 内联标签不接受顶部和底部边距 这是因为 img 是内联的replaced元素并且它确实接受margin top 它的行为与内联不同不可更换元素 如span例如 规范的相关部分详细
  • twitter bootstrap 自定义轮播指示器

    我想用这样的东西改变轮播指示器 我的轮播指示器有这样的标记 ol class carousel indicators li class active h4 IMAGE1 h4 br h5 subtitle h5 br span span l
  • Swift popToRoot 不工作

    这个突出显示的行是 popToRoot 应该继续进行的地方 成功注册后 它应该重定向到根视图控制器 由于某种原因 它对我不起作用 实际上什么也没有发生 甚至没有错误 我尝试过 self navigationController popToR
  • 使用 Web 服务的 HTTP POST

    我一直在谷歌上进行一些搜索 但在这个主题上只取得了部分成功 我想知道是否有人可以建议一个使用 C 执行 HTTP POST 将 XML 发送到 HTTP 服务的示例 我有一个 asmx Web 服务 可以从数据库中提取数据 并将该数据保存到
  • C#中有什么东西可以用作数据库触发器

    我的 ERP 数据库 A 只有读取权限 我无法在表上创建触发器 A是为ERP系统制作的 对我来说是未知程序 我有另一个数据库 B 它是我的应用程序专用的 该应用程序在两个数据库上工作 我想立即将 A 的更改 对于任何插入 更新 删除 反映给
  • 如何将一个简单的div直接覆盖在一个简单的html表格td之上?

    我有一个简单的 html 表 其中每个 tr 有一个用于标签的 td 和一个用于内容的 td 我正在寻找最正确 最有效的方法来在 内容 td 的顶部绘制一个 div 从而使标签可见 如果可能的话 计划是让第二个 td 被覆盖层 隐藏 如果有
  • 滚动 100px 后将 div 位置设置为固定?

    我尝试使用以下函数 以便在滚动 100 px 后将 div 的位置设置为距离顶部 100 px div class header style background color red something div 它不起作用 div 坚持其
  • 使用 HTTParty 检索 JSON 时出现“嵌套太深”错误

    我正在为 reddit api 编写一个非常简单的代理包装器 这样我就可以发出跨域 JSONP 请求 据我所知 reddit 不允许 JSONP 调用 我正在使用 HTTParty gem 发出调用并检索响应 我立即将其渲染为 json 到