javascript判断是否是json格式

一、问题

工作中有用到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:可选,一个转换结果的函数, 将为对象的每个成员调用此函数
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
判断一个数据是否为 JSON 格式可以通过将该数据转换为字符串,并使用 JSON.parse() 方法进行解析来实现。如果转换和解析成功,那么该数据就是 JSON 格式的。例如,可以使用以下代码来判断一个对象是否为 JSON 数据: ```javascript const data = { "name": "John", "age": 30, "isMarried": false }; try { const jsonString = JSON.stringify(data); JSON.parse(jsonString); console.log('该数据为 JSON 数据'); } catch (error) { console.log('该数据不是 JSON 数据'); } ``` 首先,我们使用 JSON.stringify() 方法将对象转换为 JSON 字符串,然后再使用 JSON.parse() 方法对该字符串进行解析。如果解析成功,那么该数据就是 JSON 格式的。如果解析失败,就说明该数据不是 JSON 格式的。以上代码中的 try-catch 语句用于捕获解析过程中的任何错误,并根据捕获的错误信息来判断数据是否为 JSON 格式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [判断一个数据是否为 JSON 数据与使用场景](https://blog.csdn.net/weixin_62635213/article/details/131322126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小马甲丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值