1、概念:JavaScript Object Notation
json现在多用于存储和交换文本信息的语法
进行数据的传输
json比xml更小、更快、更易解析
2、语法:
1、基本规则
数据在名称/值对中:json数据是由键值对构成的
键用引号引起来,也可以不用引号
值对取值类型:
1、数字;2、字符串;3、逻辑值(true/false);4、数组{person:[{},{}]};5、对象{person:{},{}};6、null
数据由逗号分隔:多个键值对由逗号分隔
花括号保存对象:使用{}定义json格式
方括号保存数组:[]
2、获取数据
3、JSON数据和Java对象的相互转换
JSON解析器:
常见的解析器:Jsonlib,Gson,fastjson,jackson
jsckson:
public class Login {
private String username;
private int age;
@JsonIgnore
private String sex;
@JsonFormat(pattern="yyyy-MM-dd")
private Date date;
@Override
public String toString() {
return "Login{" +
"username='" + username + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", date=" + date +
'}';
}
public Login() {
}
public Login(String username, int age, String sex, Date date) {
this.username = username;
this.age = age;
this.sex = sex;
this.date = date;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
1、JSON转为Java对象
2、Java对象转换JSON
1、使用步骤:
1、导入jar包
<!-- jackson 2.x 相关依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.0</version>
</dependency>
2、创建Jackson核心对象 ObjectMapper
3、调用ObjectMapper的相关方法进行转换
1、转换方法
writeValue(参数1,obj):
参数1:
File:将obj对象转换为JSON字符串,并保存到指定的文件中
Writer:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
writeValueAsString(obj):将对象转为json字符串
public void test1() throws IOException {
Login login1=new Login("张三", 24, "male",new Date());
ObjectMapper mapper=new JsonMapper();
String s = mapper.writeValueAsString(login1);
System.out.println(s);
//输出到文件
Writer writer = new FileWriter("d:/a.txt");
mapper.writeValue(writer,login1);
mapper.writeValue(new File("d:/b.txt"),login1);
//jason转换为Java对象
String s1 = "{\"username\":\"张三\",\"age\":24,\"sex\":\"male\",\"date\":"2024-03-27"}";
Login o = mapper.readValue(s1,Login.class);
System.out.println(o);
}
2、注解:
1、@JsonIgnore:排除属性:json转换时忽略所修饰的参数
2、@JsonFormat:属性值的格式化:
3、复杂java对象转换
1、List:数组
2、Map:对象格式一致
Login login1=new Login("张三", 24, "male",new Date());
Login login2=new Login("李四", 24, "male",new Date());
Login login3=new Login("王五", 24, "female",new Date());
List<Login> list=new ArrayList<>();
list.add(login1);
list.add(login2);
list.add(login3);
Map<String, Object> map= new HashMap<>();
map.put("username","张三");
map.put("age", 12);
map.put("sex", "male");
map.put("date",new Date());
ObjectMapper mapper=new JsonMapper();
System.out.println(mapper.writeValueAsString(list));
System.out.println(mapper.writeValueAsString(map));
fastjosn:
JSON.parseObject和JSON.toJSONString用法
JSON.parseObject将JSON语句转换为相应的对象。
JSON.toJSONString将对象转换为JSON语句。
首先,先导入fastjson包:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
JSON.parseObject用法:
String str="{\"username\":\"qw\",\"password\":\"12\"}";
System.out.println(str);
User user1= JSON.parseObject(str,User.class);
System.out.print(user1);