Ruby on Rails报JSON::ParserError unexpected token错误排查
错误原因
- 核心错误:
JSON.parse()的入参要求是合法JSON格式的文本字符串,你的代码直接把表示文件路径的字符串../../test.json传入了方法,解析器会把这段路径文本当成JSON内容解析,自然会抛出格式不匹配的JSON::ParserError。 - 额外隐患:你对
File.join的使用有误,该方法作用是拼接多段路径字符串,单传一个相对路径时,路径寻址依赖Rails运行时的工作目录,大概率会出现找不到目标文件的问题。另外Rails框架默认已加载JSON依赖,不需要在控制器方法内单独写require "json"。
修复方法
- 路径拼接优先使用
Rails.root生成项目内的绝对路径,彻底避免相对路径寻址错误,路径根据你test.json实际存放的位置调整即可。 - 先通过
File.read读取目标JSON文件的实际内容,再把读取到的内容传入JSON.parse做解析。
修正后的控制器代码如下:
class FoodController < ApplicationController def index # 示例:test.json存放在项目根目录时的路径写法,如果存在其他目录替换参数即可 file_path = Rails.root.join("test.json") # 先读文件内容,再解析JSON @data = JSON.parse(File.read(file_path)) end end
补充说明:如果你的test.json存放在public目录,路径就写
Rails.root.join("public", "test.json"),存放在config目录就对应改成Rails.root.join("config", "test.json"),按需调整即可。
内容的提问来源于stack exchange,提问作者Théo
相关产品推荐
相关产品推荐

