一、概念:JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
var p = {"name":"张三","age":23,"gender":"男"};
* json现在多用于存储和交换文本信息的语法
* 进行数据的传输
* JSON 比 XML 更小、更快,更易解析。
二、语法:
1. 基本规则
* 数据在名称键值对中:json数据是由键值对构成的
* 数据由逗号分隔:多个键值对由逗号分隔
* 花括号保存对象:使用{}定义json 格式
* 方括号保存数组:[]
{} 双括号表示对象
[] 中括号表示数组
“” 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {“name”: “Michael”} 可以理解为是一个包含name为Michael的对象
而[{“name”: “Michael”},{“name”: “Jerry”}]就表示包含两个对象的数组
当然了,你也可以使用{“name”:[“Michael”,“Jerry”]}来简化上面一部,这是一个拥有一个name数组的对象
案例
1.基本类型 : JSONObject
{
“name”: “张三”,
“age”: 18,
“sex”:“男”
}
2.数组类型 : JSONArray
[
{
“name”: “张三”,
“age”: 18,
“sex”: “男”
},
{
“name”: “李四”,
“age”: 19,
“sex”:“男”
}
]
3.对象嵌套 :
{
“name”: “teacher”,
“computer”: {
“CPU”: “intel7”,
“disk”: “512G”
},
“students”: [
{
“name”: “张三”,
“age”: 18,
“sex”: “男”
},
{
“name”: “李四”,
“age”: 19,
“sex”: “男”
}
]
}
三、JSON和Java对象之间的转换
1.传统方式——JSONObject、JSONArray:
转JSON:JSONObject.toString();
代码:
//Java对象转为JSON字符串
@Test
public void createJsonString() {
Person p=new Person();
p.setSex("男");
p.setAge(12);
p.setName("李伟");
JSONObject jsonObject = new JSONObject();
jsonObject.put("sex",p.getSex());
jsonObject.put("age", p.getAge());
jsonObject.put("name", p.getName());
String jsonString=jsonObject.toString();
System.out.println(jsonString);
}
转Java 对象:
1.基本类型:
public static Person getPerson(String jsonString) {
Person person = new Person();
try {
JSONObject personObject = new JSONObject(jsonString);
person.setAge(personObject.getInt("age"));
person.setName(personObject.getString("name"));
person.setSex(personObject.getString("sex"));
} catch (Exception e) {
// TODO: handle exception
}
return person;
}
主方法:
public static void main(String[] args) {
String str = "{\n" +
" \"name\": \"张三\",\n" +
" \"age\": 18,\n" +
"\"sex\":\"男\"\n" +
"}\t";
Person person = getPerson(str);
System.out.println(person);
}
2.数组类型
public static List getPersons( String jsonString) {
List list = new ArrayList();//创建一个ArrayList
try {
// 返回json的数组
JSONArray jsonArray = new JSONArray(jsonString);//将jsonString字符串放到jsonArray对象里去
for (int i = 0; i < jsonArray.length(); i++) {//遍历jsonArray数组
JSONObject jsonObject2 = jsonArray.getJSONObject(i);//获取jsonArray数组里的每一个对象,并赋给每一个jsonObject2
Person person = new Person();//通过jsonObject2对象设置Person对象的值
person.setAge(jsonObject2.getInt("age"));
person.setName(jsonObject2.getString("name"));
person.setSex(jsonObject2.getString("sex"));
list.add(person);//将设置好的person对象加到list里去
}
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
主方法:
public static void main(String[] args) {
String str = "[ \n" +
" {\n" +
" \"name\": \"张三\",\n" +
" \"age\": 18,\n" +
" \"sex\": \"男\"\n" +
" },\n" +
" {\n" +
" \"name\": \"李四\",\n" +
" \"age\": 19,\n" +
" \"sex\":\"男\"\n" +
" }\n" +
"]";
List list = getPersons(str);
System.out.println(list);
}
2.高效方式——GSON:
https://www.cnblogs.com/jianyungsun/p/6647203.html
1.Java对象转JSON:
Gson gson = new Gson();
String json = gson.toJson§;
public void createJsonString() {
Person p=new Person();
p.setSex("男");
p.setAge(12);
p.setName("李伟");
Gson gson = new Gson();
String json = gson.toJson(p);
System.out.println(json);
}
2.Json转Java 对象:
基本类型:
Person p2 = gson.fromJson(json, Person.class)
public static Person getPerson(String jsonString) {
Gson gson = new Gson();
Person p2 = gson.fromJson(jsonString, Person.class);
return p2;
}
main方法:
Person person=getPerson(str1);
System.out.println(person);
数组类型:
list = gson.fromJson(jsonString, new TypeToken>() {}.getType());
public static List getPersons( String jsonString) {
Gson gson = new Gson();
List list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());//记得改泛型<>
return list;
}
main方法:
public static void main(String[] args) {
String str1="{\n" +
" \"name\": \"张三\",\n" +
" \"age\": 18,\n" +
"\"sex\":\"男\"\n" +
"}\t\n";
String str2 ="[ \n" +
" {\n" +
" \"name\": \"张三\",\n" +
" \"age\": 18,\n" +
" \"sex\": \"男\"\n" +
" },\n" +
" {\n" +
" \"name\": \"李四\",\n" +
" \"age\": 19,\n" +
" \"sex\":\"男\"\n" +
" }\n" +
"]\n";
List personList = getPersons(str2);
System.out.println(personList);
}
3.高效方式——fastjson:
Java对象转JSON
String json = JSON. toJSONString §;
public void createJsonString() {
Person p=new Person();
p.setSex("男");
p.setAge(12);
p.setName("李伟");
String json = JSON.toJSONString (p);
System.out.println(json);
}
JSON转Java 对象:
基本类型:
Person p2 = JSON. parseObject (json, Person.class)
public static Person getPerson(String jsonString) {
Gson gson = new Gson();
Person p2 = gson.fromJson(jsonString, Person.class);
return p2;
}
主方法:
Person person=getPerson(str1);
数组类型:
list = JSON.parseArray(jsonstring, Person.class);
public static List getPersons( String jsonString) {
Gson gson = new Gson();
List list = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());
return list;
}
主方法:
public static void main(String[] args) {
String str1="{\n" +
" \"name\": \"张三\",\n" +
" \"age\": 18,\n" +
"\"sex\":\"男\"\n" +
"}\t\n";
String str2 ="[ \n" +
" {\n" +
" \"name\": \"张三\",\n" +
" \"age\": 18,\n" +
" \"sex\": \"男\"\n" +
" },\n" +
" {\n" +
" \"name\": \"李四\",\n" +
" \"age\": 19,\n" +
" \"sex\":\"男\"\n" +
" }\n" +
"]\n";
List personList = getPersons(str2);
System.out.println(personList);
}