javascript判断是否是json格式

文章目录

  • 一、问题
  • 二、解决
  • 三、总结
    • 3.1、定义

一、问题

工作中有用到JSON.parse这个来解析JSON字符串,这个时候突然有一次遇到JSON字符串是长串数字或数字字符串,主要是自己也没兼容好,就导致了一长串数字JSON.parse之后变成了e+24等数字。主要它不是JSON字符串,但也不报错,字符串中如果不是全部数字,还会报错,这种还可以进行try catch判断是否是JSON字符串,但是出现这种情况属实让我踩了一个坑。如下图所示:

二、解决

function isJSON(str) {if (typeof str == 'string') {try {JSON.parse(str);return true;} catch(e) {console.log(e);return false;}}console.log('It is not a string!')    
}

以上try/catch的确实不能完全检验一个字符串是JSON格式的字符串,有许多例外:

JSON.parse('123'); // 123
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null

JS中的数据类型分为:字符串、数字、布尔、数组、对象、nullundefined

我们可以使用如下的方法来判断:

function isJSON(str) {if (typeof str == 'string') {try {var obj=JSON.parse(str);if (typeof obj == 'object' && obj) {return true;} else {return false;}} catch(e) {console.log('error:'+str+'!!!'+e);return false;}}console.log('It is not a string!')
}console.log('123 is json? ' + isJSON('123')) // 123 is json? false
console.log('{} is json? ' + isJSON('{}')) // {} is json? true
console.log('true is json? ' + isJSON('true')) // true is json? false
console.log('foo is json? ' + isJSON('"foo"')) // foo is json? false
console.log('[1, 5, "false"] is json? ' + isJSON('[1, 5, "false"]')) // [1, 5, "false"] is json? true
console.log('null is json? ' + isJSON('null')) // null is json? false
console.log('["1{211323}","2"] is json? ' + isJSON('["1{211323}","2"]')) // ["1{211323}","2"] is json? true
console.log('[{},"2"] is json? ' + isJSON('[{},"2"]')) // [{},"2"] is json? true
console.log('[[{},{"2":"3"}],"2"] is json? ' + isJSON('[[{},{"2":"3"}],"2"]')) // [[{},{"2":"3"}],"2"] is json? true

三、总结

判断是否是JSON字符串的方法:

1、首先使用JSON.parse(str)语句解析指定数据str

2、然后使用if(typeof obj == 'object' && obj)语句判断解析后数据的类型是否为object类型且不为空;如果是,则str数据是json格式

3.1、定义

JSON 通常用于与服务端交换数据。在接收服务器数据时一般是字符串。我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

语法

JSON.parse(text[, reviver])

参数说明

  • text:必需, 一个有效的 JSON 字符串
JSON.parse(text[, reviver])

参数说明

  • text:必需, 一个有效的 JSON 字符串
  • reviver:可选,一个转换结果的函数, 将为对象的每个成员调用此函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/215995.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码

基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于孔雀算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于孔雀优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

吴恩达《机器学习》10-1-10-3:决定下一步做什么、评估一个假设、模型选择和交叉验证集

一、决定下一步做什么 在机器学习的学习过程中,我们已经接触了许多不同的学习算法,逐渐深入了解了先进的机器学习技术。然而,即使在了解了这些算法的情况下,仍然存在一些差距,有些人能够高效而有力地运用这些算法&…

Axios 拦截器 请求拦截器 响应拦截器

请求拦截器 相当于一个关卡,如果满足条件就放行请求,不满足就拦截 响应拦截器 在处理结果之前,先对结果进行预处理,比如:对数据进行一下格式化的处理 全局请求拦截器 axios.interceptors.request.use(config > { /…

网站监控是什么

在当今高度互联的世界中,网站已成为企业和个人成功的关键因素。无论是提供产品或服务,还是建立品牌形象,网站都是不可或缺的工具。然而,随着互联网用户对访问速度和用户体验的高要求,保持网站的稳定性和可用性变得至关…

centos系统下,docker安装sqlserver并用本地Navicat连接

文章目录 一,centos下安装docker二,docker安装sqlserver20192.1 安装遇到的问题2.1.1 修改用户名进不去数据库2.1.2 安装2022版的sqlserver发现启动失败 三,Navicat连接centos下的sqlserver3.1 下载ODBC Driver 参考微软网址: 使…

Python文件访问和修改时间操作的高级技法

更多Python学习内容:ipengtao.com 在某些应用场景下,我们可能需要对文件的访问时间和修改时间进行定制或修改。Python提供了一些库和方法,使得这一过程变得简单而灵活。本文将深入探讨如何使用Python来实现更新文件的访问和修改时间&#xff…

Facebook的特点优势

Facebook作为全球最大的社交媒体平台之一,同时也是最受欢迎的社交网站之一,Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户,覆盖了几乎所有国家和地区。这使得人们…

ros2文件package.xml与cmakelists.txt比较

每次在ros2里面添加文件以后,都要修改packages.xml,与cmakelists.txt文件。

01_原理-事件循环

01_原理-事件循环 文章目录 01_原理-事件循环一、浏览器的进程模型①:何为进程?②:何为线程?③:浏览器有哪些进程和线程? 二、渲染主线程是如何工作的?三、若干解释①:何为异步&…

使用 HTML、CSS 和 JavaScript 创建图像滑块

使用 HTML、CSS 和 JavaScript 创建轮播图 在本文中,我们将讨论如何使用 HTML、CSS 和 JavaScript 构建轮播图。我们将演示两种不同的创建滑块的方法,一种是基于opacity的滑块,另一种是基于transform的。 创建 HTML 我们首先从 HTML 代码开…

【间歇振荡器2片555时基仿真】2022-9-24

缘由multisim出现这个应该怎么解决吖,急需解决-嵌入式-CSDN问答 输出一定要有电阻分压才能前后连接控制否则一定报错。

2023年亚太杯数学建模A题解题思路(*基于OpenCV的复杂背景下苹果目标的识别定位方法研究)

摘要 由于要求较高的时效性和劳力投入,果实采摘环节成为苹果生产作业中十分重要的一部分。而对于自然环境下生长的苹果,光照影响、枝叶遮挡和果实重叠等情况普遍存在,这严重影响了果实的准确识别以及采摘点的精确定位。针对在复杂背景下苹果的…