SyntaxError: Unexpected token R in JSON at position 0

2024-04-12 21:32

本文主要是介绍SyntaxError: Unexpected token R in JSON at position 0,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

这是在写多人博客管理系统练习项目时遇到的一个坑(巨坑)。因为学习视频中老师没有提到,所以得自己解决。但是又因为个人的错误又有一定的特性,导致某些方面没有想到而花费了大量的时间。在此记录一下,防止以后再犯同样的错误,也方便别人能解决错误。如果你百度查到 SyntaxError: Unexpected token R in JSON at position 0 报错并按照里面的方法还是无法解决不妨将这篇笔记看完。

报错信息1

在这里插入图片描述

报错代码

// 联合查询两个集合信息(文章和用户,但是这里只展示了部分字段)
let articles = await Article.find({}, { cover: 1, _id: 1, title: 1, publishDate: 1 }).populate('author', { userName: 1, _id: 0 });
// res.send(articles);
// 渲染页面
res.render('admin/article', {articles: articles,count: count
});

报错原因

根据报错信息可以知道是在字符串数据格式向 json 数据格式转换时发生了错误。那为什么会这样呢?从数据获取得到的不是一个个对象组成的数据集合吗?在用户管理页面(前面实现的一个功能没有报错)输出单纯查询到的用户信息的格式如下(注意:没有涉及联合查询,只截取部分):

在这里插入图片描述

文章管理页面使用集合关联查询得到的数据中结构唯一不同的内容如下图,那问题是不是就应该出现在下面标记的那部分呢?

在这里插入图片描述

参考他人的笔记,原因是 mongoose 返回的 author 对象不是普通对象,而是所谓的 mongoose 文档对象。里面的属性存在与普通对象不一样的格式,所以在解析时出现错误

解决方法

方法一:结合原因我们需要将 author 属性转换为普通对象,有一种方式是在查询数据时链式调用 lean() 方法这会使 mongoose 返回普通对象而不再是 mongoose 文档对象

方法二:可以先使用 JSON.string() 方法将返回的集合整体转换为 json 字符串后再使用 JSON.parse() 方法将其解析为 json 对象。代码示例如下:

    let articles = await Article.find({}, { cover: 1, _id: 1, title: 1, publishDate: 1 }).populate('author', { userName: 1, _id: 0 });let articles1 = JSON.stringify(articles);let articles2 = JSON.parse(articles1);// console.log(articles == articles2); // false// res.send(articles);res.render('admin/article', {articles: articles2,count: count});

将 articles 转换为字符串后再次将其转换为 json 对象即可解决问题,如果输出 articles 和 articles2 看不出两者有什么不同(为了方便对比特意关闭了浏览器插件)。如图两者一样的输出,但是如果使用 == 比较两者返回的是 false

在这里插入图片描述

你还没有解决吗?

如果你还没有解决那可能是跟我一样问题了。我是在测试用户的删除功能时将添加该文章的用户删除了,而其相应的文章也该从数据库中删除。但是我没有将相应的文章删除,这会导致在查询文章信息时用户 author 字段是 null 值。这样即使使用上述方法也会出现另一个错误 SyntaxError: Unexpected token T in JSON at position 0
在这里插入图片描述

在这里插入图片描述

其实是一样的原理,因为在解析本该遇到普通对象的值时遇到的却是 null 。但又不是跟前面那样是文档对象,所以格式上不同错误信息提示解析遇到的不合法内容也就不同。

当然还有一种可能就是你渲染的模板出现了问题,例如在模板中导入骨架模板文件时写错单词(我就有一次将 extend 写成 extends),或者其他模板填充标签出错等。

这篇关于SyntaxError: Unexpected token R in JSON at position 0的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898290

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制