Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

java fastjson 如何判断整个字符串或其内部指定 key 是什么类型格式

Java 笔记 Java 笔记


java 的 fastjson 库我们常用做 JSON 数据结构的工具库,其 API 中没有直接提供能判断当前 Json 字符串或 JSON 对象内部指定 key 是具体什么类型格式的方法(主要是区分 JSONObject 或 JSONArray 类型),需要开发者自行判断。

解决方法

在阐述解决方案之前,我们要明确的是,在 fastjson 中,JSON 是抽象类,JSONObjectJSONArray 都是其实现子类。

判断整个字符串的类型

判断整个字符串是 JSONObjectJSONArray 类型时,需要用 JSON 提供的 parse 方法,具体如下:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class JSONDemo {

    public static void main(String[] args) {

        String text = "{\"knowledge\":\"dict\"}";
//        String text = "[{\"knowledge\":\"dict\"},{\"knowledge\":\"qa\"}]";

        Object object = JSON.parse(text);

        if (object instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) object;
            System.out.println("JSONObject:" + jsonObject);
            // do other things
        } else if (object instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) object;
            System.out.println("JSONArray:" + jsonArray);
            // do other things
        } else {
            System.out.println("either JSONObject or JSONArray, text:" + text);
            // do other things
        }

    }

}

如上示例可以看出,如果不确定输入字符串 text 是什么格式的情况下,做如下操作:

  1. JSON.parse 方法来解析内容;
  2. 通过 instanceof 运算符判断返回的对象类型。

判断 JSON 内部元素的类型

JSON 对象的元素或 key 事先不知道具体什么类型,需要通过具体实例数据解析判断时,代码如下:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class JSONDemo {

    public static void main(String[] args) {

        String text = "{\"knowledge\":{\"name\":\"dict\"}}";
//        String text = "{\"knowledge\":[{\"name\":\"dict\"}]}";

        JSONObject jsonObject = JSON.parseObject(text);

        Object knowledgeObj = jsonObject.get("knowledge");
        if (knowledgeObj instanceof JSONObject) {
            JSONObject knowledgeJSONObj = (JSONObject) knowledgeObj;
            System.out.println("JSONObject:" + knowledgeJSONObj);
            // do other things
        } else if (knowledgeObj instanceof JSONArray) {
            JSONArray knowledgeJSONArr = (JSONArray) knowledgeObj;
            System.out.println("JSONArray:" + knowledgeJSONArr);
            // do other things
        } else {
            System.out.println("either JSONObject or JSONArray, knowledgeObj:" + knowledgeObj);
            // do other things
        }

    }

}

根据上述代码可以看出,步骤如下:

  1. 利用 JSONObject.get 方法获取指定 key 的对象;
  2. 通过 instanceof 运算符判断返回的对象类型。

如果是 JSONArray 的数据类型,第一步就改成 JSONArray.get 方法,参数由 key 变为数组的索引。