JSONObject生成
新建一个maven工程,maven引入相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>java</groupId>
<artifactId>java</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.json/json 用于生成json-->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180130</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io 用于解析json-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</project>
新建一个Grade实体
package json;
public class Grade {
private String object;
private Integer grade;
public Grade() {
}
public Grade(String object, Integer grade) {
this.object = object;
this.grade = grade;
}
public String getObject() {
return object;
}
public void setObject(String object) {
this.object = object;
}
public Integer getGrade() {
return grade;
}
public void setGrade(Integer grade) {
this.grade = grade;
}
}
新建一个User实体
package json;
public class User {
private String name;
private Integer age;
private boolean has_car;
private Object has_girlfriend;
private String[] major;
private Grade[] grades;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public boolean isHas_car() {
return has_car;
}
public void setHas_car(boolean has_car) {
this.has_car = has_car;
}
public Object getHas_girlfriend() {
return has_girlfriend;
}
public void setHas_girlfriend(Object has_girlfriend) {
this.has_girlfriend = has_girlfriend;
}
public String[] getMajor() {
return major;
}
public void setMajor(String[] major) {
this.major = major;
}
public Grade[] getGrades() {
return grades;
}
public void setGrades(Grade[] grades) {
this.grades = grades;
}
}
代码如下
package json;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class FirstJSON {
public static void main(String[] args)
{
//methed1();
//methed2();
//methed3();
}
//方法一
//直接构建
public static void methed1()
{
JSONObject jsonObject = new JSONObject();
try{
Object nullObj = null;
jsonObject.put("name","张三");
jsonObject.put("age",20);
jsonObject.put("has_car",false);
jsonObject.put("has_girlfriend",nullObj);
jsonObject.put("major",new String[]{"C","Java"});
jsonObject.put("grades",new Grade[]{new Grade("C",80),new Grade("Java",85)});
System.out.println(jsonObject.toString());
}catch (Exception e){
}
}
//方法二
//使用HashMap构建
//使用HashMap构建json,实际上即先创建好一个HashMap对象并且将数据打包进去,而后在创建JSONObject时将其作为一个参数传进去
public static void methed2()
{
Object nullObj = null;
Map<String,Object> map = new HashMap<String, Object>();
map.put("name","张三");
map.put("age",20);
map.put("has_car",false);
map.put("has_girlfriend",nullObj);
map.put("major",new String[]{"C","Java"});
map.put("grades",new Grade[]{new Grade("C",80),new Grade("Java",85)});
System.out.println(new JSONObject(map).toString());
}
//方法三
//使用JavaBean构建
//相较于前两种方法,实际开发中应用JavaBean构建json的情况更为常见,因为这样代码的重用率更高。
public static void methed3()
{
User user = new User();
user.setName("张三");
user.setAge(19);
user.setHas_car(true);
user.setHas_girlfriend(null);
user.setMajor(new String[]{"C","Java"});
user.setGrades(new Grade[]{new Grade("C",80),new Grade("Java",85)});
System.out.println(new JSONObject(user));
}
}
运行结果
{"has_car":false,"major":["C","Java"],"name":"张三","grades":[{"grade":80,"object":"C"},{"grade":85,"object":"Java"}],"age":20}
JSONObject解析
首先在工程目录"src/main/java"下创建一个json文件,用于解析。
demo.json
{"has_car":true,
"major":["C","Java"],
"name":"张三",
"grades":[
{"grade":80,"object":"C"},
{"grade":85,"object":"Java"}
],
"age":19}
代码:
package json;
import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ReadJson {
public static void main(String[] args) throws IOException
{
//读取文件
File file = new File("src/main/java/demo.json");
String content = FileUtils.readFileToString(file);
JSONObject jsonObject = new JSONObject(content);
//对基本类型的解析
System.out.println("name:"+jsonObject.getString("name"));
System.out.println("has_car:"+jsonObject.getBoolean("has_car"));
System.out.println("age:"+jsonObject.getInt("age"));
//对数组的解析
JSONArray major = jsonObject.getJSONArray("major");
System.out.println("major:");
for (int i = 0; i < major.length(); i++) {
String s = (String) major.get(i);
System.out.println(s);
}
JSONArray grades = jsonObject.getJSONArray("grades");
for(int i = 0;i<grades.length();i++)
{
//grades.toList().get(i)取出来的是一个HashMap,不能直接强制转换为一个Grade实体
Map<String,Grade> grade = (HashMap)grades.toList().get(i);
System.out.println("object:"+grade.get("object"));
System.out.println("grade:"+grade.get("grade"));
}
}
}
运行结果
name:张三
has_car:true
age:19
major:
C
Java
object:C
grade:80
object:Java
grade:85