一、简介
1、描述
1)JavaScript 对象表示法(JavaScript Object Notation)
2)存储和交换文本信息的语法。类似 XML
3)比 XML 更小、更快,更易解析
4)独立于语言
2、语法
1)花括号保存对象,方括号保存数组,数据在名称/值对中,数据由逗号分隔
例如:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
2)JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
3、JSON对象
1)JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
2)这一点也容易理解,与这条 JavaScript 语句等价:
firstName = "John"
lastName = "Doe"
4、JSON 数组
1)JSON 数组在方括号中书写:
数组可包含多个对象:
[{ "firstName":"John" , "lastName":"Doe" },{ "firstName":"Anna" , "lastName":"Smith" },{ "firstName":"Peter" , "lastName":"Jones" }]
二、JavaScript中解析JSON
1、JSON字符串
'内容’
2、JSON字符串->JavaScript对象
1)eval函数
var obj = eval ("(" + txt + ")");
注意:存在潜在的安全问题
2)JSON解析器
var obj = JSON.parse(txt)
三、JAVA中
1、JSONObject
- JSONObject.fromObject(Object object) JSONObject //object可以是Map,Bean,JSON字符串("{'hello':'world','abc':'xyz'}")
- getString(String key) String //获取对象的属性值,类似:get(String key) Object,get(Object key) Object
- put(Object key,Object value) //增加对象的属性
- JSONObject.toBean(JSONObject,Class) Object //Map,可以直接强制类型转换
2、JSONArray
1)转JSONArray
- JSONArray.fromObject(Object object) JSONArray //object可以是List,数组,Map,JSON字符串("['name','world']")
- add(Object value)
- add(int index,Object value)
2)转List,Map,数组
直接强制类型转换
-------------------------------------分割线---------------------------------------------------
下面举几个具体的列子理解下上面写的内容
1、JSONObject
定义一个JavaBean
public class Student {
private String name;
private int Grade;
private List<String> teachers; public Student() {
} public Student(String name, int grade, List<String> teachers) {
super();
this.name = name;
Grade = grade;
this.teachers = teachers;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getGrade() {
return Grade;
} public void setGrade(int grade) {
Grade = grade;
} public List<String> getTeachers() {
return teachers;
} public void setTeachers(List<String> teachers) {
this.teachers = teachers;
} }
主方法:
public class TestJson {
public static void main(String[] args) {
List<String> teacherList = new ArrayList<String>();
teacherList.add("math");
teacherList.add("english");
Student stu = new Student("yaohuix", 2, teacherList);
JSONObject jsonObject = JSONObject.fromObject(stu);
// Bean转JSONObject或JSON字符串(只要toString())
System.out.println(jsonObject);// 输出:{"grade":15,"name":"yaohuix","teachers":["math","english"]}
// JSONObject或JSON字符串(只要toString())转Bean
Student otherStu = (Student) JSONObject.toBean(jsonObject,
Student.class);
System.out.println(otherStu.getName());// 输出:yaohuix
System.out.println(otherStu.getGrade());// 输出:2
System.out.println(otherStu.getTeachers());// 输出:[math, english]
}
}