目录
定义
FastJson中JsonObject的常用方法
构建Json对象
JavaBean转Json
Json转JavaBean
JSON:就是一种轻量级的数据交换格式,被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构,易于阅读和编写;同时也易于机器解析和生成,有效的提升网络传输效率;支持多种语言,很多流行的语言都对JSON格式有着很友好的支持。
JSON对象:就是多个属性被{}括起来的。
JSON数组:就是包含了多个JSON对象的一个集合,数组是以数组括号[]括起来的。JSON数组并不一定是要相同的JSON对象的集合,也可以是不同的对象。
JSON、JSON对象、JSON数组的区别
JSON是一种数据结构,类型xml;
JSON对象则是对JSON的具体体现;JSON数组则是将多个JSON对象进行存储的一个集合。
JSONObject
JSONObject是根据JSON形式在java中存在的对象映射。各大JSON类库的JSONObject内部实现也是不太一样。以fastjson为例,就是实现了Map接口。其使用方式和HashMap并无太大区别。
{
"area": "武汉",
"name": "张三",
"age": 25
}
JSONArray
JSONArray就是存放JSONObject的容器。以fastjson为例,就是实现了List接口,默认创建为ArrayList。
[{
“area”: “武汉”,
“name”: “张三”,
“age”: 25
},
{
“area”: “深圳”,
“name”: “李四”,
“age”: 22
}]
通俗来讲 JSONObject 是对象的json形式 JSONArry 是对象集合的JSON形式。
先来看下它有哪些常用方法,以及有什么作用:
1.put(String key, Object value)方法,在JSONObject对象中设置键值对在,在进行设值得时候,key是唯一的,如果用相同的key不断设值得时候,保留后面的值。
2.Object get(String key) :根据key值获取JSONObject对象中对应的value值,获取到的值是Object类型,需要手动转化为需要的数据类型
3.int size():获取JSONObject对象中键值对的数量
4.boolean isEmpty():判断该JSONObject对象是否为空
5.containsKey(Object key):判断是否有需要的key值
6.boolean containsValue(Object value):判断是否有需要的value值
7.JSONObject getJSONObject(String key):如果JSONObjct对象中的value是一个JSONObject对象,即根据key获取对应的JSONObject对象;
8.JSONArray getJSONArray(String key) :如果JSONObject对象中的value是一个JSONObject数组,既根据key获取对应的JSONObject数组;
9.Object remove(Object key):根据key清除某一个键值对。
由于JSONObject是一个map,它还具有map特有的两个方法:
10.Set
keySet() :获取JSONObject中的key,并将其放入Set集合中 11.Set
> entrySet():在循环遍历时使用,取得是键和值的映射关系,Entry就是Map接口中的内部接口 与String字符串转换:
12.toJSONString() /toString():将JSONObject对象转换为json的字符串
常用的方法主要为以上这些,下面列出使用这些方法的example:
public static void main(String[] args) {
//新建JSONObject对象
JSONObject object1 = new JSONObject();
//1.在JSONObject对象中放入键值对
object1.put("1","a");
object1.put("2","b");
object1.put("3","c");
//2.根据key获取value
String name = (String) object1.get("1");
System.out.println(1);
//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("1");
System.out.println(isContainsKeyResult);
//6.是否包含对应的value值,包含返回true,不包含返回false
boolean isContainsValueResult = object1.containsValue("a");
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 keySet= object1.keySet();
for (String key : keySet) {
System.out.print(" "+key);
}
System.out.println();
//11.取得JSONObject对象中的键和值的映射关系
Set> entrySet = object1.entrySet();
for (Entry entry : entrySet) {
System.out.println(entry);
}
//12.转换为json字符串
String str1 = object1.toJSONString();
System.out.println(str1);
String str2 =object1.toString();
System.out.println(str2);
}
// Json对象中添加的是键值对,JSONArray中添加的是Json对象
JSONObject jsonObject = new JSONObject();
jsonObject.put("1","a");
jsonObject.put("2","b");
jsonObject.put("3","c");
JSONArray JsonArray = new JSONArray();
jsonObject.put("key", "value");//JSONObject对象中添加键值对
JsonArray.add(jsonObject);//将JSONObject对象添加到Json数组中
User user = new User();
user.setName("张三");
user.setAget("32");
user.setSex(null);
现需要转换,我采用的方法是:
JSONObject jsonObjectData = (JSONObject) JSONObject.toJSON(user);
转出来的结果是:
jsonObjectData只有两个key(name与age),sex丢失了。
看了下jdk api文档,发现这是序列化造成的,JSONObject.toJSON默认是不序列化null值对应的key的,改成如下就对了。
JSONObject jsonObjectData = (JSONObject) JSONObject.toJSON(user,SerializeConfig.getGlobalInstance());
复杂的JsonBean转Json
直接把里面的属性取出来 复制给 新对象,然后将新对象序列化 JSONObject.toJSONString()
String str="{"password":"admin","gender":true,"name":"张三","telephone":"123456","id":1,"account":"admin"}";
// 前面是JSON字符串 后面是java对象类型
User user=JSONObject.parseObject(str,User.class);
System.out.println("account: "+user.getAccount()+"---"+"paasword: "+user.getPassword());
String listStr = "[{\"id\":1,\"name\":\"vivi\"},{\"id\":2,\"name\":\"jojo\"}]";
// (1)转Json List
JSONArray jsonArray = JSONArray.parseArray(listStr);
System.out.println(jsonArray);
// (2)转具体的List<实体类>
List listDemo = jsonArray.toJavaList(Demo.class);
for (Demo demo : listDemo){
System.out.println(demo.toString());
}
}
// 简单写法
List listDemo = JSONArray.parseArray(listStr,Demo.class)
遍历JsonObject
public static void main(String[] args) throws Exception {
JSONObject jsonObject = new JSONObject();
jsonObject.put("1","a");
jsonObject.put("2","b");
jsonObject.put("3","c");
for (String a : jsonObject.keySet()){
System.out.println("key:"+a+";Value:"+jsonObject.get(a));
}
}
输出:
key:1;Value:a
key:2;Value:b
key:3;Value:c