–人无远虑,必有近忧–
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}