Fastjson日常工作中常用api整理记录(会随着工作中用到不断添加)

前言:

关于Fastjson的API网上一搜一大把,本人自己写这个的目的主要是为了记录学习,便于自己查阅,也给对Fastjson刚接触的同学提供一点点参考,如果能帮助到你那就更好了,我也会非常开心。下边的几个常用方法都是根据自己工作中常用到的做个整理,之后会随着工作用到的越来越多逐渐添加。如果有写的不准确的欢迎指正,在此感谢。

常用API

/**
 * 1、public static final Object parse(String text); //String转JSONObject、JSONAray
 * 2、public static final JSONObject parseObject(String text);//String转 JSONObject
 * 3、public static final <T> T parseObject(String text, Class<T> clazz); //JSON字符串转为Bean
 * 4、public static final JSONArray parseArray(String text); //JSON字符串转为JSONarray
 * 5、public static final <T> List<T> parseArray(String text, Class<T> clazz); //JSON字符串转JAVA Bean集合
 * 6、public static final String toJSONString(Object object); //JAVA Bean转为JSON字符串
 * 7、public static final String toJSONString(Object object, boolean prettyFormat); //将JAVA Bean转为字符串,可以选择是否按照格式输出
 * 8、public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray
 */
  • [1] public static final Object parse(String text) //String转JSONObject、JSONAray
    这个方法的主要作用是将json格式的字符串转为JSONObject或者JSONArray,其中有个需要注意的地方:
    (1)如果你的String格式为JSONObject格式,那么可以直接转为JSONObject,而不能强转为JSONArray,编译不会报错,运行会报错java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.alibaba.fastjson.JSONArray;同样如果String格式为JSONArray格式,那么可以直接转为JSONArray,而不能直接强转JSONObject,同样编译不会报错,而运行会报错java.lang.ClassCastException: com.alibaba.fastjson.JSONArray cannot be cast to com.alibaba.fastjson.JSONObject,下面举例说明。
    一个Person类,三个属性,姓名、年龄、银行卡,get、set方法什么的就不详细写了。
    public class Person {
        private String name;
        private int age;
        private List<String> IdCard;
    }
    
    第一种String,JSONObject类型
	{
	    "name": "James",
	    "age": 35,
	    "idCard": [
	        "123456",
	        "3455678",
	        "567780"
	    ]
	}

现在把这个字符串转为JSONObject,代码如下:

@Test
    public void testStringJsonObject(){
        String string_person = "{\n" +
                "    \"name\": \"James\",\n" +
                "    \"age\": 18,\n" +
                "    \"idCard\": [\n" +
                "        \"123456\",\n" +
                "        \"3455678\",\n" +
                "        \"567780\"\n" +
                "    ]\n" +
                "}";

        JSONObject jsonObject = (JSONObject) JSON.parse(string_person);
        System.out.println(jsonObject);
        System.out.println("name :" + jsonObject.get("name"));
        System.out.println("age :" + jsonObject.get("age"));
        System.out.println("idCard :" + jsonObject.get("idCard"));
    }

输出结果如下:

{"idCard":["123456","3455678","567780"],"name":"James","age":18}
name :James
age :18
idCard :["123456","3455678","567780"]

如果我把转换类型换一下,转为JSONArray,

  		JSONArray jsonArray = (JSONArray) JSON.parse(string_person);
        System.out.println(jsonArray);

在这里插入图片描述
第二种String,JSONArrayt类型

[
    {
        "name": "James",
        "age": 35,
        "idCard": [
            "123456",
            "3455678",
            "567780"
        ]
    },
    {
        "name": "Jack Ma",
        "age": 50,
        "idCard": [
            "5756756",
            "9808989",
            "5867657"
        ]
    }
]

把这个字符串转为JSONArray,代码如下:

 @Test
    public void testStringJsonArray(){
        String array_person = "[\n" +
                "    {\n" +
                "        \"name\": \"James\",\n" +
                "        \"age\": 35,\n" +
                "        \"idCard\": [\n" +
                "            \"123456\",\n" +
                "            \"3455678\",\n" +
                "            \"567780\"\n" +
                "        ]\n" +
                "    },\n" +
                "    {\n" +
                "        \"name\": \"Jack Ma\",\n" +
                "        \"age\": 50,\n" +
                "        \"idCard\": [\n" +
                "            \"5756756\",\n" +
                "            \"9808989\",\n" +
                "            \"5867657\"\n" +
                "        ]\n" +
                "    }\n" +
                "]";
        JSONArray jsonArray = (JSONArray) JSON.parse(array_person);
        System.out.println(jsonArray);
        for (int i = 0; i <jsonArray.size() ; i++) {
            System.out.println(jsonArray.get(i));
        }
    }

我们可以向遍历数组一样,按照索引去遍历JSONArray,输出如下:

`[{“idCard”:[“123456”,“3455678”,“567780”],“name”:“James”,“age”:35},{“idCard”:[“5756756”,“9808989”,“5867657”],“name”:“Jack Ma”,“age”:50}]

{“idCard”:[“123456”,“3455678”,“567780”],“name”:“James”,“age”:35}
{“idCard”:[“5756756”,“9808989”,“5867657”],“name”:“Jack Ma”,“age”:50}
` *
如果把这种类型的强转为JSONObject就会报异常:
在这里插入图片描述
所以这个方法在应用是还是要注意区分String的格式,JSONObject格式,外围是花括号,JSONArray格式,外围是方括号。

[2] public static final JSONObject parseObject(String text);//String转 JSONObject

这个方式作用是将字符串转为JSONObject,注意点和方法一一样,注意字符串的格式,应该为JSONObject格式的字符串,否则会报转换异常。

  • [3] public static final T parseObject(String text, Class clazz); //JSON字符串转为Bean
 @Test
    //public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
    public void parseObject(){
        String string_person = "{\n" +
                "    \"name\": \"James\",\n" +
                "    \"age\": 18,\n" +
                "    \"idCard\": [\n" +
                "        \"123456\",\n" +
                "        \"3455678\",\n" +
                "        \"567780\"\n" +
                "    ]\n" +
                "}";

        Person person = JSON.parseObject(string_person, Person.class);
        System.out.println(person.toString());
    }
Person[name='James', age=18, IdCard=[123456, 3455678, 567780]]

注意文本的格式,如果是JSONArray格式的,可以先转为JSONArray,再转为JSONObject,再转为JavaBean。直接转会报转换异常;

  • [4]public static final JSONArray parseArray(String text); //JSON字符串转为JSONarray
  • 和第三个方法差不多,使用的时候注意文本格式
 		JSONArray jsonArray = JSON.parseArray(array_person);
        System.out.println(jsonArray);
[{"idCard":["123456","3455678","567780"],"name":"James","age":35},{"idCard":["5756756","9808989","5867657"],"name":"Jack Ma","age":50}]
  • [5] public static final List parseArray(String text, Class clazz); //JSON字符串转JAVA Bean集合
		List<Person> personList = JSON.parseArray(array_person, Person.class);
        System.out.println(personList.get(0));
        System.out.println(personList.get(1));

输出如下

	Person[name='James', age=35, IdCard=[123456, 3455678, 567780]]
	Person[name='Jack Ma', age=50, IdCard=[5756756, 9808989, 5867657]]

  • [6] public static final String toJSONString(Object object); //JAVA Bean转为JSON字符串
    代码片段:
	String string = JSON.toJSONString(p1);
    System.out.println("JSON to String :" + string);

输出如下:

JSON to String :{"age":35,"idCard":["123456","3455678","567780"],"name":"James"}
  • [7] public static final String toJSONString(Object object, boolean prettyFormat); //将JAVA Bean转为字符串,可以选择是否按照格式输出
		String string1 = JSON.toJSONString(p1, true);
        System.out.println(string1);
        String string2 = JSON.toJSONString(p1, false);
        System.out.println(string2);

输出如下:

{
	"age":35,
	"idCard":[
		"123456",
		"3455678",
		"567780"
	],
	"name":"James"
}
{"age":35,"idCard":["123456","3455678","567780"],"name":"James"}

第一个输出,按照格式,第二个不按照格式。

  • [8] public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray,使用的时候注意强制类型转换。
        JSONObject jsonObject = (JSONObject) JSON.toJSON(p1);
        System.out.println(jsonObject);

输出如下:

{"idCard":["123456","3455678","567780"],"name":"James","age":35}

而在转数组的时候,我自己实验会报错

 		JSONArray jsonArray1 = (JSONArray) JSON.toJSON(p1);
        System.out.println(jsonArray1);
java.lang.ClassCastException: com.alibaba.fastjson.JSONObject cannot be cast to com.alibaba.fastjson.JSONArray

但是如果p1是一个list类型,就不会报错。如果p1就是一个对象,而不是对象列表,有一种方式也可以转为JSONArray,可以先转为JSONObject,在转为JSONArray,代码如下:

   		JSONObject jsonObject = (JSONObject) JSON.toJSON(p1);
        JSONArray jsonArray = new JSONArray();
        jsonArray.add(jsonObject);
        System.out.println(jsonArray);

输出结果如下,注意花括号变为了方括号,变为了数组类型:

[{"idCard":["123456","3455678","567780"],"name":"James","age":35}]

总之使用方式非常多,大家可以按照自己的习惯选择。虽然FastJson暴了一些BUG,但这在软件领域我感觉是很正常的,没有完美的工具,出了BUG解决就好了,现在仍然有很多公司,无论是大公司还是小公司仍然在用FastJson,越早爆出BUG越早解决,未尝不是好事啊!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值