JSON
JSON简介
格式特点
文本格式: JSON是一种文本格式,可以被任何文本编辑器读取和编辑。 键/值对: JSON数据是以键/值对的形式组织的,键和值之间使用冒号分隔,每组键/值对之间使用逗号分隔。 数据类型: JSON支持字符串、数字、布尔值、数组、对象、null等数据类型。 嵌套结构: 可以在JSON对象中嵌套其他对象或数组,实现复杂的数据结构。
示例
var personStr = '{
"name" : "Alice" ,
"age" : 30 ,
"isStudent" : false ,
"hobbies" : [ "reading" , "painting" ] ,
"address" : {
"city" : "New York" ,
"zipcode" : "10001"
} ,
"isMarried" : null
} '
应用领域
数据交换: 在Web开发中,常用于客户端和服务器之间的数据交换。 配置文件: 用于存储和传输应用程序的配置信息。 API交互: 许多Web API返回的数据格式是JSON。 NoSQL数据库: 一些NoSQL数据库使用JSON格式存储数据。
优点
易读性: 对人类友好,易于阅读和编写。 跨语言: JSON是一种独立于语言的数据格式,可以被多种编程语言支持。 轻量级: JSON相对于XML等其他数据格式更为简洁。
限制
不支持注释: JSON不支持注释,不能在数据中添加注释。 仅支持Unicode字符集: JSON只支持Unicode字符集,不支持二进制数据。
解析与生成
解析: 几乎所有编程语言都有JSON解析器,可以将JSON数据解析为相应的数据结构。 生成: 同样,几乎所有编程语言都有JSON生成器,可以将数据结构转换为JSON格式。
JSON Schema
JSON Schema: 用于描述JSON数据的结构、格式和约束,可以用来验证JSON数据的有效性。
Jackson实现对json与java对象的相互转换
import com. fasterxml. jackson. databind. ObjectMapper ;
public class JsonToJava {
public static void main ( String [ ] args) {
ObjectMapper objectMapper = new ObjectMapper ( ) ;
String json = "{\"name\":\"Alice\",\"age\":30}" ;
try {
Person person = objectMapper. readValue ( json, Person . class ) ;
System . out. println ( person. getName ( ) ) ;
System . out. println ( person. getAge ( ) ) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
}
static class Person {
private String name;
private int age;
public Person ( ) { }
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public int getAge ( ) {
return age;
}
public void setAge ( int age) {
this . age = age;
}
}
}
//将java对象转换为JSON
import com.fasterxml.jackson.databind.ObjectMapper;
public class JavaToJson {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
Person person = new Person();
person.setName("Bob");
person.setAge(25);
try {
// 将 Java 对象转换为 JSON
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
}
static class Person {
private String name;
private int age;
// 必须有默认构造函数
public Person() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
}