一、简介
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] } }