–人无远虑,必有近忧–

1.什么是FastJson、JSONObject?

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

JSONObject是一种数据结构,可以理解为JSON格式的数据结构,即“key-value”结构,其格式为“{“key1”:value1,“key2”,value2…}”;JSONObject添加元素可以使用put和get方法。

2.JSONObject它是干嘛的?

JsonObject 就是常说的 json。是一种重要的数据传输对象。

因为ajax请求不刷新页面,但配合js可以实现局部刷新,因此json常常被用来作为异步请求的返回对象使用。

通过response.getWriter()获取PrintWriter pw,然后pw.print(json)。如果没有设置response.setContentType(“application/json; charset=utf-8”); 则需要自己再js中进行解析。

JSONObject添加元素可以使用put(key,value)方法和调用元素方法get(key),这两种方法大家可以任选一种,另外JsonObject是一种重要的数据传输对象,是实际工作中是必不可少的。

3.JSONObject该如何学习

1.导包
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.1</version>
</dependency>

2.常用方法Api
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.crazyit.app.test.TestStudent;
import org.junit.jupiter.api.Test;

import java.util.Map;
import java.util.Set;

public class TestJsonObjet {
    @Test
    public void testJsonObjet(){
        //新建JSONObject对象
        JSONObject object1 = new JSONObject();

        //1.在JSONObject对象中放入键值对
        object1.put("name", "张三");
        object1.put("name1", "张三1");
        object1.put("name2", "张三2");

        //2.根据key获取value
        String name = (String) object1.get("name");
        System.out.println(name);

        //3.获取JSONObject中的键值对个数
        int size = object1.size();
        System.out.println(size);

        //4.判断是否为空
        boolean result = object1.isEmpty();
        System.out.println(result);

        //5.是否包含对应的key值,包含返回true,不包含返回false
        boolean isContainsKeyResult = object1.containsKey("name");
        System.out.println(isContainsKeyResult);

        //6.是否包含对应的value值,包含返回true,不包含返回false
        boolean isContainsValueResult = object1.containsValue("王五");
        System.out.println(isContainsValueResult);

        //7.JSONObjct对象中的value是一个JSONObject对象,即根据key获取对应的JSONObject对象;
        JSONObject object2 = new JSONObject();
        //将jsonobject对象作为value进行设置
        object2.put("student1", object1);
        JSONObject student =object2.getJSONObject("student1");
        System.out.println(student);

        //8.如果JSONObject对象中的value是一个JSONObject数组,既根据key获取对应的JSONObject数组;
        JSONObject objectArray = new JSONObject();
        //创建JSONArray数组
        JSONArray jsonArray = new JSONArray();
        //在JSONArray数组设值:jsonArray.add(int index, Object value);
        jsonArray.add(0, "this is a jsonArray value");
        jsonArray.add(1, "another jsonArray value");
        objectArray.put("testArray", jsonArray);
        //获取JSONObject对象中的JSONArray数组
        JSONArray jsonArray2 = objectArray.getJSONArray("testArray");
        System.out.println(jsonArray2);

        //9.remove.根据key移除JSONObject对象中的某个键值对
        object1.remove("name");
        System.out.println(object1);

        //10.取得JSONObject对象中key的集合
        Set<String> keySet= object1.keySet();
        for (String key : keySet) {
            System.out.print("   "+key);
        }
        System.out.println();

        //11.取得JSONObject对象中的键和值的映射关系
        Set<Map.Entry<String, Object>> entrySet = object1.entrySet();
        for (Map.Entry<String, Object> entry : entrySet) {
            System.out.println(entry);
        }


        //12.转换为json字符串
        String str1 = object1.toJSONString();
        System.out.println(str1);
        String str2 =object1.toString();
        System.out.println(str2);

        //13.将JSONObject转换成对象
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","张三");
        jsonObject.put("age","12");
        String JSONStr = JSON.toJSONString(jsonObject);
        TestStudent testStudent = JSON.parseObject(JSONStr, TestStudent.class);
        System.out.println(testStudent);
    }
}

TestStudent 实体类

package org.crazyit.app.test;

import lombok.Data;

@Data
public class TestStudent {
    private String name;
    private String age;

    @Override
    public String toString() {
        return "TestStudent{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

输出结果:

com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 TestJsonObjet,testJsonObjet

张三
3
false
true
false
{"name":"张三","name2":"张三2","name1":"张三1"}
["this is a jsonArray value","another jsonArray value"]
{"name2":"张三2","name1":"张三1"}
   name2   name1
name2=张三2
name1=张三1
{"name2":"张三2","name1":"张三1"}
{"name2":"张三2","name1":"张三1"}
TestStudent{name='张三', age='12'}


Process finished with exit code 0

4.删除key和获取key的返回值部分对比

删除key不用考虑key是否存在,有就删除,没有不会报错,获取key没有的时候会返回null

import com.alibaba.fastjson.JSONObject;
import org.junit.jupiter.api.Test;

import java.math.BigDecimal;

public class TestJsonObjet1 {
    @Test
    public void testJsonObjet(){
        //新建JSONObject对象
        JSONObject object1 = new JSONObject();

        //1.在JSONObject对象中放入键值对
        object1.put("name", "张三");
        object1.put("name1", "张三1");
        object1.put("name2", "张三2");

        // 成功删除存在的key,返回key对应的value
        Object name = object1.remove("name");
        // 通过key,value删除,返回结果是bollean
        boolean remove = object1.remove("name1", "张三3");
        // 删除一个不存在的key返回结果是null
        Object na3123me = object1.remove("na3123me");

        System.out.println(name);
        System.out.println(remove);
        System.out.println(na3123me);

        String string = object1.getString("3123");
        Object o = object1.get("3123");
        int intValue = object1.getIntValue("3123");
        BigDecimal bigDecimal = object1.getBigDecimal("3123");
        System.out.println(string);
        System.out.println(o);
        System.out.println(intValue);
        System.out.println(bigDecimal);
        System.out.println(object1);

    }
}

输出结果:

张三
false
null
null
null
0
null
{"name2":"张三2","name1":"张三1"}


Process finished with exit code 0

5.对JSONObject的key和value(数字、字符串)进行封装为字符串

//新建JSONObject对象
        JSONObject object1 = new JSONObject();

        //1.在JSONObject对象中放入键值对
        object1.put("name", "张三");
        object1.put("name1", "张三1");
        object1.put("name2", "张三2");
        object1.put("age", 12);
        object1.put("money", 1200.00);

        Map<String, String> map = new HashMap<>();
        Iterator<Map.Entry<String, Object>> iterator = object1.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<String, Object> object = iterator.next();
            // 强制转换,会类型转换异常java.lang.ClassCastException
//            map.put(object.getKey(), (String) object.getValue());
            map.put(object.getKey(),  object.getValue()+"");
        }
        System.out.println(map);

结果:

{money=1200.01, name=张三, name2=张三2, name1=张三1, age=12}

Iterator<Entry<String,String>> iter=map.entrySet().iterator(); 是什么意思

GitHub 加速计划 / fastj / fastjson
25.69 K
6.51 K
下载
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
最近提交(Master分支:1 个月前 )
c942c834 - 1 年前
5bc4709b - 1 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐