【JSON解析】浅谈JSONObject的使用

简介

在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 
JSON建构于两种结构:

“名称/值”对的集合(A Collection of name/value pairs),在不同的语言中,它被理解为对象(Object), 记录(record), 结构(struct), 字典(dictionary), 有趣列表(keyed list), 哈希表(hash table)或者关联数组(associative array)。

JSONObject依赖:

最后一行需要保留,有两个jdk版本的实现:json-lib-2.1-jdk13.jar和json-lib-2.1-jdk15.jar

<dependency>
      <groupId>net.sf.json-lib</groupId>
      <artifactId>json-lib</artifactId>
      <version>2.4</version>
      <classifier>jdk15</classifier>
</dependency>

使用net.sf.json需要导入的jar包

jar包下载:https://pan.baidu.com/s/1iZiXw55TPwIxYFQQCaR9Gw

JSONObject

创建JSONObject,添加属性

//创建JSONObject
JSONObject json = new JSONObject();
//添加属性
json.put("username", "张三");
json.put("password", "123");
//打印
System.out.println(json);

//增加属性
json.element("sex", "男");
json.put("age", 18);
System.out.println(json);

根据key返回输出

System.out.println(json.get("sex"));

判断输出对象的类型

boolean isArray = json.isArray();
boolean isEmpty = json.isEmpty();
boolean isNullObject = json.isNullObject();
System.out.println("是否数组:"+isArray+", 是否空:"+isEmpty+", 是否空为空对象:"+isNullObject);

把JSONArray添加到JSONObject中

/把JSONArray添加到JSONObject中
JSONArray jsonArray = new JSONArray();
jsonArray.add(0, "张三");
jsonArray.add(1, "123");
//开始添加
json.element("student", jsonArray);
System.out.println(json);

全部代码:

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class Json {
	public static void main(String[] args) {
		//创建JSONObject
		JSONObject json = new JSONObject();
		//添加属性
		json.put("username", "张三");
		json.put("password", "123");
		//打印
		System.out.println(json);
		
		//增加属性
		json.element("sex", "男");
		json.put("age", 18);
		System.out.println(json);
		
		//根据key返回
		System.out.println(json.get("sex"));
		
		//判断输出对象的类型
		boolean isArray = json.isArray();
		boolean isEmpty = json.isEmpty();
		boolean isNullObject = json.isNullObject();
		System.out.println("是否数组:"+isArray+", 是否空:"+isEmpty+", 是否空为空对象:"+isNullObject);
		
		System.out.println("=====");
		
		//把JSONArray添加到JSONObject中
		JSONArray jsonArray = new JSONArray();
		jsonArray.add(0, "张三");
		jsonArray.add(1, "123");
		//开始添加
		json.element("student", jsonArray);
		System.out.println(json);
	}
}

运行结果:

JSONArray

创建JSONArray,添加属性值

//创建JSONArray
JSONArray jsonArray = new JSONArray();
//添加
jsonArray.add(0, "张三");
jsonArray.add(1, "123");
jsonArray.element("男");
System.

根据下标返回输出

System.out.println(jsonArray.get(0));

根据下标设置新值,修改

jsonArray.set(0, "李四");
System.out.println(jsonArray);

把JSONObject放入到JSONArray中

//把JSONObject放入到JSONArray中
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "张三");
jsonObject.put("password", "123");
jsonArray.add(jsonObject);
System.

全部代码:

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class Json {
	public static void main(String[] args) {
		//创建JSONArray
		JSONArray jsonArray = new JSONArray();
		//添加
		jsonArray.add(0, "张三");
		jsonArray.add(1, "123");
		jsonArray.element("男");
		System.out.println(jsonArray);
		
		//根据下标返回输出
		System.out.println(jsonArray.get(0));
		
		//根据下标设置新值,修改
		jsonArray.set(0, "李四");
		System.out.println(jsonArray);
		
		//把JSONObject放入到JSONArray中
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("username", "张三");
		jsonObject.put("password", "123");
		jsonArray.add(jsonObject);
		System.out.println(jsonArray);
		
		//循环输出
		for(int i = 0; i < jsonArray.size(); i++) {
			System.out.println(jsonArray.get(i));
		}
	}
}

运行结果

JavaBean与json字符串互转

student类:

public class Student {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Student(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Student [username=" + username + ", password=" + password + "]";
	}
}

定义对象,JavaBean对象转json字符串

//定义对象
Student stu = new Student("张三", "123456");
//JavaBean对象转json字符串
JSONObject jsonObject = JSONObject.fromObject(stu);
System.out.println(jsonObject);

json字符串转为javaBean

//json字符串转为javaBean
//定义json字符串
String jsondata = "{\"username\":\"李四\", \"password\":\"123\"}";
//转为json对象
JSONObject json = JSONObject.fromObject(jsondata);
//转为JavaBean对象
Student stu2 = (Student)JSONObject.toBean(json, Student.class);
System.out.println(stu2.toString());

全部代码:

import net.sf.json.JSONObject;

public class Json {
	public static void main(String[] args) {
		//定义对象
		Student stu = new Student("张三", "123456");
		//JavaBean对象转json字符串
		JSONObject jsonObject = JSONObject.fromObject(stu);
		System.out.println(jsonObject);
		
		//json字符串转为javaBean
		//定义json字符串
		String jsondata = "{\"username\":\"李四\", \"password\":\"123\"}";
		//转为json对象
		JSONObject json = JSONObject.fromObject(jsondata);
		//转为JavaBean对象
		Student stu2 = (Student)JSONObject.toBean(json, Student.class);
		System.out.println(stu2.toString());
	}
}

输出结果:

List与json字符串互转

先定义list集合,list转json字符串

//定义list集合
List list = new ArrayList();
list.add(new Student("张三", "123"));
list.add(new Student("李四", "456"));
//list转json字符串
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray);

json字符串转list

//json字符串转list
List list2 = new ArrayList();
String jsondata = "[{\"password\":\"123\",\"username\":\"张三\"},{\"password\":\"456\",\"username\":\"李四\"}]";
JSONArray jsonArray1 = JSONArray.fromObject(jsondata);
for(int i = 0; i < jsonArray1.size(); i++) {
	JSONObject jsonObject2 = jsonArray1.getJSONObject(i);
	Student stu2 = (Student)JSONObject.toBean(jsonObject2, Student.class);
	list2.add(stu2);
}
System.out.println(list2);

全部代码

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class Json {
	public static void main(String[] args) {
		//定义list集合
		List list = new ArrayList();
		list.add(new Student("张三", "123"));
		list.add(new Student("李四", "456"));
		//list转json字符串
		JSONArray jsonArray = JSONArray.fromObject(list);
		System.out.println(jsonArray);
		
		//json字符串转list
		List list2 = new ArrayList();
		String jsondata = "[{\"password\":\"123\",\"username\":\"张三\"},{\"password\":\"456\",\"username\":\"李四\"}]";
		JSONArray jsonArray1 = JSONArray.fromObject(jsondata);
		for(int i = 0; i < jsonArray1.size(); i++) {
			JSONObject jsonObject2 = jsonArray1.getJSONObject(i);
			Student stu2 = (Student)JSONObject.toBean(jsonObject2, Student.class);
			list2.add(stu2);
		}
		System.out.println(list2);
	}
}

运行结果

Map与json字符串互转

定义map集合,Map转json字符串

//定义map集合
Map map = new HashMap();
map.put("1", new Student("张三", "123"));
map.put("2", new Student("李四", "456"));
//Map转json字符串
JSONObject jsonMap = JSONObject.fromObject(map);
System.out.println(jsonMap);

定义字符串map集合,map集合字符串转为map

//定义字符串map集合
String jsondata = "{\"1\":{\"password\":\"123\",\"username\":\"张三\"},\"2\":{\"password\":\"456\",\"username\":\"李四\"}}";
//map集合字符串转为map
Map map2 = (Map)JSONObject.fromObject(jsondata);
Set set = map2.keySet();
//定义迭代器,迭代输出
Iterator ite = set.iterator();
while(ite.hasNext()) {
	//取出一个字符串对象
	String key = (String)ite.next();
	//转为json格式
	JSONObject jsonObject = JSONObject.fromObject(map2.get(key));
	//转为对象
	Student stu = (Student)JSONObject.toBean(jsonObject, Student.class);
	System.out.println(key+"   "+stu);
}

全部代码

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import net.sf.json.JSONObject;

public class Json {
	public static void main(String[] args) {
		//定义map集合
		Map map = new HashMap();
		map.put("1", new Student("张三", "123"));
		map.put("2", new Student("李四", "456"));
		//Map转json字符串
		JSONObject jsonMap = JSONObject.fromObject(map);
		System.out.println(jsonMap);
		
		//定义字符串map集合
		String jsondata = "{\"1\":{\"password\":\"123\",\"username\":\"张三\"},\"2\":{\"password\":\"456\",\"username\":\"李四\"}}";
		//map集合字符串转为map
		Map map2 = (Map)JSONObject.fromObject(jsondata);
		Set set = map2.keySet();
		//定义迭代器,迭代输出
		Iterator ite = set.iterator();
		while(ite.hasNext()) {
			//取出一个字符串对象
			String key = (String)ite.next();
			//转为json格式
			JSONObject jsonObject = JSONObject.fromObject(map2.get(key));
			//转为对象
			Student stu = (Student)JSONObject.toBean(jsonObject, Student.class);
			System.out.println(key+"   "+stu);
		}
	}
}

运行结果

JSONArray与List互转

定义list集合,List转型JSONArray

//定义list集合
List<Student> list = new ArrayList<Student>();
list.add(new Student("张三", "123"));
list.add(new Student("李四", "456"));
//List转型JSONArray
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray.toString());

JSONArray转型List,JSONArray是用的上面的那个jsonArray变量

//JSONArray转型List
List<Student> list2 = JSONArray.toList(jsonArray, new Student(), new JsonConfig());
Iterator<Student> ite =  list2.iterator();
while(ite.hasNext()) {
	Student stu = ite.next();
	System.out.println(stu);
}

全部代码

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;

public class Json {
	public static void main(String[] args) {
		//定义list集合
		List<Student> list = new ArrayList<Student>();
		list.add(new Student("张三", "123"));
		list.add(new Student("李四", "456"));
		//List转型JSONArray
		JSONArray jsonArray = JSONArray.fromObject(list);
		System.out.println(jsonArray.toString());
		
		//JSONArray转型List
		List<Student> list2 = JSONArray.toList(jsonArray, new Student(), new JsonConfig());
		Iterator<Student> ite =  list2.iterator();
		while(ite.hasNext()) {
			Student stu = ite.next();
			System.out.println(stu);
		}
	}
}

运行结果

JSONArray与数组互转

定义数组,数组转JSONArray

//定义数组
boolean[] boolArray = {true, false, true};
//java数组转JSONArray
JSONArray jsonArray = JSONArray.fromObject(boolArray);
System.out.println(jsonArray.toString());

JSONArray转java数组

//JSONArray转java数组
Object obj[] = jsonArray.toArray();
for(Object o : obj) {
	System.out.print(o+"\t");
}

全部代码

import net.sf.json.JSONArray;

public class Json {
	public static void main(String[] args) {
		//定义数组
		boolean[] boolArray = {true, false, true};
		//java数组转JSONArray
		JSONArray jsonArray = JSONArray.fromObject(boolArray);
		System.out.println(jsonArray.toString());
		
		//JSONArray转java数组
		Object obj[] = jsonArray.toArray();
		for(Object o : obj) {
			System.out.print(o+"\t");
		}
	}
}

运行结果

推荐链接:Alibaba Fastjson——超好用的JOSN解析库

如果你想根据某个属性将一个 JSON 对象拆分成多个 JSON 对象,可以按照以下步骤操作: 1. 将 JSON 字符串转换成 JSON 对象。 2. 遍历 JSON 对象的每个属性,如果某个属性的值是数组,就对数组进行遍历。 3. 在遍历数组的过程中,根据数组中某个属性的值来创建一个新的 JSON 对象,并将原本的属性拷贝到新的 JSON 对象中。 4. 将新的 JSON 对象添加到一个新的 JSON 数组中。 5. 最后将新的 JSON 数组转换成 JSON 字符串。 以下是一个示例代码,假设我们要根据属性 "type" 拆分 JSON 对象: ```java import org.json.*; public class JsonObjectSplitter { public static void main(String[] args) { String jsonString = "{\"items\": [{\"name\": \"item1\", \"type\": \"type1\", \"value\": 1}, {\"name\": \"item2\", \"type\": \"type2\", \"value\": 2}, {\"name\": \"item3\", \"type\": \"type1\", \"value\": 3}]}"; JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray("items"); JSONObject newJsonObject = new JSONObject(); JSONArray newJsonArray = new JSONArray(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject itemJsonObject = jsonArray.getJSONObject(i); String type = itemJsonObject.getString("type"); if (!newJsonObject.has(type)) { newJsonObject.put(type, new JSONArray()); } JSONObject newItemJsonObject = new JSONObject(itemJsonObject, new String[]{"name", "value"}); newJsonObject.getJSONArray(type).put(newItemJsonObject); } for (String key : newJsonObject.keySet()) { JSONObject typeJsonObject = new JSONObject(); typeJsonObject.put("type", key); typeJsonObject.put("items", newJsonObject.getJSONArray(key)); newJsonArray.put(typeJsonObject); } JSONObject resultJsonObject = new JSONObject(); resultJsonObject.put("items", newJsonArray); System.out.println(resultJsonObject.toString()); } } ``` 输出结果如下: ```json { "items": [ { "type": "type1", "items": [ { "name": "item1", "value": 1 }, { "name": "item3", "value": 3 } ] }, { "type": "type2", "items": [ { "name": "item2", "value": 2 } ] } ] } ```
评论 75
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值