判断一个字符串是否是合法的JSON字符串

本文介绍使用Alibaba FastJSON、Jackson 和 Google Gson三种库来判断一个字符串是否为有效的JSON格式,并对比了它们的性能表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断一个字符串是否是合法的JSON字符串

pom.xml

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.31</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.5</version>
        </dependency>

java代码

/**
     * 暴力解析:Alibaba fastjson
     * @param test
     * @return
     */
    public final static boolean isJSONValid(String test) {
        try {
            JSONObject.parseObject(test);
        } catch (JSONException ex) {
            try {
                JSONObject.parseArray(test);
            } catch (JSONException ex1) {
                return false;
            }
        }
        return true;
    }

    /**
     *  Jackson library
     * @param jsonInString
     * @return
     */
    public final static boolean isJSONValid2(String jsonInString ) {
        try {
            final ObjectMapper mapper = new ObjectMapper();
            mapper.readTree(jsonInString);
            return true;
        } catch (IOException e) {
            return false;
        }
    }

    /**
     * Google Gson
     * @param jsonInString
     * @return
     */
    public final static boolean isJSONValid3(String jsonInString) {
        try {
            gson.fromJson(jsonInString, Object.class);
            return true;
        } catch(JsonSyntaxException ex) {
            return false;
        }
    }


测试结果

isJSONValid()16510 ms16161 ms2018 ms
isJSONValid2()17946 ms17486 ms2698 ms
isJSONValid3()20648 ms20208 ms2508 ms

区别

    /**
     * 是否是合法的Gson字符串
     * @param targetStr
     * @return
     */
    private static boolean isGoodGson(String targetStr,Class clazz) {
        if(StringUtils.isBlank(targetStr)){
            return false;
        }
        try {
            new Gson().fromJson(targetStr,clazz);
            return true;
        } catch(JsonSyntaxException ex) {
            LOG.error("targetStr={} is not a valid {}",targetStr,clazz.getName(),ex);
            return false;
        }
    }

    /**
     * 是否是合法的JsonArray (alibaba 认为前1种不是JSON串)
     * 例如:[{a:b}]  [{'a':'b'}]  [{"a":"b"}]
     * @param targetStr
     * @return
     */
    public static boolean isJsonArray(String targetStr){
      return isGoodGson(targetStr,JsonArray.class);
    }

    /**
     * 是否是合法的JsonObject(alibaba 认为前1种不是JSON串)
     * 例如:{a:b} {'a':'b'} {"a":"b"}
     * @param targetStr
     * @return
     */
    public static boolean isJsonObject(String targetStr){
        return isGoodGson(targetStr,JsonObject.class);
    }

结论

性能相差不太多,推荐方式二isJSONValid2()

参考

stackoverflow

在 Vue 或其他 JavaScript 环境中,可以通过尝试解析字符串判断其是否为合法JSON 格式。具体实现方式如下: ### 使用 `try...catch` 和 `JSON.parse` 通过调用 `JSON.parse()` 尝试解析目标字符串,如果成功则说明该字符串是有效的 JSON;如果抛出异常,则表示它不是一个合法JSON。 #### 实现代码 ```javascript function isJsonString(str) { try { JSON.parse(str); } catch (e) { return false; } return true; } ``` 此函数的核心逻辑在于捕获可能由非法 JSON 引发的错误[^1]。当输入有效时不会触发任何异常,而无效数据会引发 `SyntaxError` 并被捕获到 `catch` 块中[^2]。 另外需要注意的是,在某些情况下可能会遇到看似合理的 JSON 数据但实际上并非如此的情况(比如单引号替代双引号)。因此严格依赖标准库中的 `JSON.parse` 是最安全的做法之一[^3]。 对于更复杂的场景或者需要额外验证的内容结构正确性的需求来说, 可能还需要结合正则表达式或者其他工具来进行进一步确认. ### 示例应用 假设我们在组件中有这样一个按钮用于测试给定文本是不是正确的JSON形式: ```html <template> <div> <input v-model="testStr" placeholder="请输入待检测字符串"> <button @click="checkIfJson">Check</button> <p>{{ result }}</p> </div> </template> <script> export default { data() { return { testStr: '', result: '' }; }, methods: { checkIfJson() { this.result = isJsonString(this.testStr) ? '这是合法JSON!' : '这不是合法JSON.'; } } }; function isJsonString(str) { try { JSON.parse(str); } catch (e) { return false; } return true; } </script> ``` 在这个例子当中,我们允许用户输入任意字符串并通过点击按钮执行检查操作,最终显示结果告诉他们所填入的东西能否被认定成JSON格式的数据[^4]. ### 注意事项 尽管上述方法简单高效,但在实际开发过程中还需考虑性能因素以及边界条件等问题。例如非常庞大的JSON文档可能导致长时间运行甚至阻塞主线程等情况发生。此时可引入Web Worker或其他异步机制加以优化处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值