json是基于Javascript语法的子集
- 数据在名称/值对中
- 数据由逗号分隔
- 大括号{}保存json对象
- 中括号[]保存json数组,数组内容可以为对象
json数据书写格式为:key:value
例:"name":"zhangsan"
这条语句与JavaScript的语句等价:name:"zhangsan"
json的值可以是数字,字符串,逻辑值,数组,对象,null
json通常用于与服务器端交换数据,在接收数据时一般是字符串,下面学习基本的json对象内容和json字符串与JavaScript对象的转换
json对象
json对象在大括号中书写:
{
"key1":"value1"
"key2":"value2"
}
json如何访问对象值
var myObj, x;
myObj = { "name":"runoob", "alexa":10000, "site":null };
x = myObj.name;//x = myObj["name"];
使用点号来访问,也可以使用中括号访问。
嵌套json对象
myObj = {
"name":"runoob",
"alexa":10000,
"sites": {
"site1":"www.runoob.com",
"site2":"m.runoob.com",
"site3":"c.runoob.com"
}
}
修改json对象某属性的值
访问到+=+值:myObj.sites.site1 = "www.google.com";
如何删除某json对象的属性
delete+访问到:delete myObj.sites.site1;
json数组
json数组在中括号中书写:[ "Google", "Runoob", "Taobao" ]
json对象中的数组
对象属性的值可以是一个数组:
{
"name":"网站",
"num":3,
"sites":[ "Google", "Runoob", "Taobao" ]
}
如何访问json对象属性中的数组
使用索引值访问数组:x = myObj.sites[0];
json数组的其他操作
与json对象的操作类似
json与JavaScript对象转换(json解析)JSON.parse()
JSON.parse(text[, reviver])
- text:必需, 一个有效的 JSON 字符串。
- reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
该方法将json字符串转换为JavaScript对象
例子
<p id="demo"></p>
<script>
var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');
document.getElementById("demo").innerHTML = obj.name + ":" + obj.site;
</script>
JSON.stringify()
使用JSON.stringify()将JavaScript对象转成json格式的字符串
JSON.stringify(value[, replacer[, space]])
参数说明:
- value:
必需, 要转换的 JavaScript 值(通常为对象或数组)。 - replacer:
可选。用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。 - space:
可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
例子
JavaScript对象转换
var obj = { "name":"runoob", "alexa":10000, "site":"www.runoob.com"};
var myJSON = JSON.stringify(obj);
结果:{"name":"runoob","alexa":10000,"site":"www.runoob.com"}
JavaScript数组转换
var arr = [ "Google", "Runoob", "Taobao", "Facebook" ]; var myJSON = JSON.stringify(arr);
结果:["Google","Runoob","Taobao","Facebook"]
注意
json不能存储Date对象
fastjson将Java对象转换为json格式字符串:
为什么会转义:因为两种意义的双引号需要将其中一中前加/,避免系统识别错误
(1)创建JavaBean,在字段或getter、setter方法上添加@JSONField注解 (属性常用name,表示json对象的key,还有一些其他属性)加不加都行 (2)将Java对象转换为json对象: 使用JSON.toJSONString(Object object) a. 创建一个测试类 b. 声明JavaBean对象并实例化 c. 向Java对象中添加数据 d. String str = JSON.toJSONString(JavaBean) e. str即为转成的json字符串 f. JSON.toJSONString(Object object)方法也可以重载为 JSON.toJSONString(Object object, SerializerFeature... features)方法 后面的SerializerFeature参数的意义是是否将Java对象中没有添加的数据的 属性也放入json字符串中,显示为null或"" 注意:FastJSON在进行操作时,是根据getter和setter的方法进行的, 并不是根据注解,所以必须有getter和setter的方法,注解加不加都可以。
创建json对象
- 创建json对象
需要使用JSONObject(fastjson提供的json对象)和JSONArray(fastjson提供的json数组对象)对象
可以将JSONObject看成Map<String,Onject>
将JSONArray看成List<Object>,json对象的集合
@Test
public void a() throws ParseException {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < 2; i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("AGE", 10);
jsonObject.put("FULL NAME", "Doe " + i);
jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
jsonArray.add(jsonObject);
}
String jsonOutput = jsonArray.toJSONString();
}
将json字符串转换成Java对象:
使用JSON.parseObject()
@Test
public void whenJson_thanConvertToObjectCorrect() {
Person person = new Person(20, "John", "Doe", new Date());
String jsonObject = JSON.toJSONString(person);
Person newPerson = JSON.parseObject(jsonObject, Person.class);
}
parseObject(String jsonString)---将一个json字符串解析成为jsonObject
将json数组解析成为Java集合对象
JSONObject jsonObject = JSONObject.parseObject(jsonString);
JSONArray jsonArray = jsonObject.getJSONArray("data");//得到json对象中data属性的值(该值是一个json对象数组)
/**
* 将json数组解析成为Java集合对象
*/
List<Movie> movies = jsonArray.toJavaList(Movie.class);