JSON详解

JSON 教程

什么是 JSON ?

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言 *
  • JSON 具有自我描述性,更易理解
  • JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。

JSON - 简介

与 XML 相同之处

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

为什么使用 JSON?

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML
  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中
使用 JSON
  • 读取 JSON 字符串
  • 用 eval() 处理 JSON 字符串

JSON 语法

JSON 语法是 JavaScript 语法的子集。

JSON 语法规则

JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象 {“username”:“马云”,“age”:“30”}
  • 中括号保存数组 [10,20,30]

JSON 名称/值对

JSON 数据的书写格式是:名称/值对。

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"name": "json"

JSON 值

JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

JSON 数字

JSON 数字可以是整型或者浮点型:

{"age":30}

JSON 对象

JSON 对象在大括号({})中书写:

对象可以包含多个名称/值对:

{"name":"json", "url":"www.baidu.com"}

JSON 数组

JSON 数组在中括号中书写:

数组可包含多个对象

{"sites":
  [
    {"name":"百度", "url":"www.baidu.com"},
    {"name":"google", "url":"www.google.com"}
  ]
}

在上面的例子中,对象 “sites” 是包含三个对象的数组。每个对象代表一条关于某个网站(name、url)的记录。

JSON 布尔值

JSON 布尔值可以是 true 或者 false:

{"flag":true}

JSON null

JSON 可以设置 null 值:

{"name":null}

JSON 文件

  • JSON 文件的文件类型是 “.json”
  • JSON 文本的 MIME 类型是 “application/json”

JSON 对象

对象语法

{
"name":"张三",
"age":12
}

JSON 对象使用在大括号({})中书写。

对象可以包含多个 **key/value(键/值)**对。

key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

key 和 value 中使用冒号(:)分割。

每个 key/value 对使用逗号(,)分割。

var myObj,x;

myObj = {
"name":"张三",
"age":12
};
x = myObj.name;
alert(x);

你也可以使用中括号([])来访问对象的值:

x = myObj["name"];

嵌套 JSON 对象

JSON 对象中可以包含另外一个 JSON 对象:

myObj =
{
"name":"马云",
"age":20,
"sites":
{
"site1":"www.a.com",
"site2":"www.b.com",
"site3":"www.c.com"
}}

你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。

x = myObj.sites.site1;    // 获取数据    www.a.com
 或者
x = myObj.sites["site1"]; // 获取数据 

JSON 数组

数组作为 JSON 对象

[
"Google",
"sxt",
"Taobao"
]

JSON 数组在中括号中书写。

JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

JavaScript 中,数组值可以是以上的 JSON 数据类型,也可以是 JavaScript 的表达式,包括函数,日期,及 undefined

JSON 对象中的数组

对象属性的值可以是一个数组:

{"name":"网站","num":3,"sites":[

"Google",

"sxt",

"Taobao"

]}

我们可以使用索引值来访问数组:

x = myObj.sites[0];

js中 JSON格式Str与JSON对象之间的转换

一:String 转换成JSON

浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:

JSON.parse(jsonstr); 可以将json字符串转换成json对象

 var str1 = '["bjsxt","szsxt","gzsxt"]';
 var obj1 = JSON.parse(str1);
 console.log(obj1[2]);
			
var str2 = '{"name":"szsxt"}';
var obj2 = JSON.parse(str2);
alert(obj2.name);

注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。

Javascript支持的转换方式:

eval(’(’ + jsonstr + ‘)’); 可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号

var obj = '{"password":"tiger","username":"scott"}';
var u = eval('('+ obj + ')');
alert(u.username);

注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。

二:Json转成字符串

JSON.stringify(jsonobj); //可以将json对象转换成json对符串

 //json 转成字符串 
 var json1  = ["bjsxt","szsxt","gzsxt"];
 console.log(JSON.stringify(json1));
//json 转成字符串 
var json2 = {"name":"张三"};
console.log(JSON.stringify(json2));

我的案例

js 的对象都是object对象衍生出来的
		//js 的对象都是object对象衍生出来的 
			// 对象.属性名 = 赋值;
			
			var obj=new Object();
			obj.name="zhang";
			obj.age=28;
			console.log(obj);
			console.log(obj.name);
			console.log(obj.age);
			//删除
			delete obj.name;
			console.log(obj)
创建对象
//通过方法实例化对象1----------------------------
			function factory(name,age){
				var obj=new Object();
				obj.age=age;
				obj.name=name;
				return obj;
			}
		//通过factory创建对象
			var fac1=factory("sad",12);
			console.log(fac1);
//通过方法实例化对象2----------------------------
			function Person(name,age){
				this.age=age;
				this.name=name;
			}
			var p=new Person("qwe",45);
			console.log(p);
		//给对象添加方法:(Person.prototype.方法名称)固定格式
		Person.prototype.eat=function(){
			console.log("eat方法");//类似于java中的静态方法
		}
		//调用方法
		p.eat();//
对象的继承
//利用pro实现继承
		function Person(name,age){
			this.name=name;
			this.age=age;
			
		}
		function Student(sno){
			this.sno=sno;
		}
		//	student类的属性指向person类,实现继承
		Student.prototype=new Person("aa",33);
		var stu1=new Student(1000);
		
		console.log(stu1.name);//调用父类属性
		console.log(stu1.sno);
//继承2------------------------------------
function father1(){
				this.name="ljx";
				this.age="22";
			}
			function son1(){
				father1.apply(this);
			}
			var a=new son1();
			console.log(a.name);
创建对象,数组,对象嵌套的注意事项:
		//创建json对象
		//格式不能错!!!!
		var jsonobj={"name":"zxc0","age":15};		
		//获取值:
		console.log(jsonobj.age)
		console.log(jsonobj.name)

		//创建json数组
		var jsonarr=[10,20,40];
		//获取下标是0的元素
		console.log(jsonarr[0])

		//json的嵌套
		var jsonobjs={
			"name":"lkj",
			"age":34,
			"dog":{//----------------------这里dog要双引号引起来
				"name":"wangwang",
				"age":2
			}
		}
		var dogname=jsonobjs.dog.name;
		console.log(dogname);
json对象和字符换的相互转换
		//json对象和字符换的相互转换
		var json1={name:"zxc",age:20};
		console.log(typeof json1)//打印object
		
		//把json转换为字符串
		var jsonstr=JSON.stringify(json1);
		console.log(jsonstr)//{"name":"zxc","age":20}
		console.log(typeof jsonstr)//打印string
		
		//把json字符串转成json对象
		//注意这里的写法,name和age都要强制加上“”
		//JSON一定要大写!!
		var jsonStr1='{"name":"aa","age":15}';
		var jsonstrobj=JSON.parse(jsonStr1)
		console.log(jsonstrobj.name)

fastjson—api(Alibaba)

导入fastjson包调用jar包即可
下载jar 地址 https://mvnrepository.com/

json字符串转成java对象

public class Json02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String jsonstr="{\"age\":34,\"name\":\"aa\"}";
		//转为单个对象
		User user=JSON.parseObject(jsonstr,User.class);
		System.out.println();
		
		String jsonstr2="[\r\n" + 
				"	{\r\n" + 
				"		\"age\":30,\r\n" + 
				"		\"name\":\"乔峰\"\r\n" + 
				"	},\r\n" + 
				"	{\r\n" + 
				"		\"age\":35,\r\n" + 
				"		\"name\":\"段正淳\"\r\n" + 
				"	},\r\n" + 
				"	{\r\n" + 
				"		\"age\":30,\r\n" + 
				"		\"name\":\"白刀风\"\r\n" + 
				"	}\r\n" + 
				"]";
		//转为集合接收
		List<User> list=JSON.parseArray(jsonstr2,User.class);
		for (User u : list) {
			System.err.println(u);
		}
	
	}

}

java对象转化为json字符串

public class Json_01 {
	public static void main(String[] args) {
		
		StringBuilder sb = new StringBuilder();
		User u = new User("aa", 34);		
		//自己写json
		sb.append("{").append("\"name\":").append(u.getName()).append("}");		
		System.out.println(sb.toString());
						
		//java对象格式化为json字符串
		String jsonstring=JSON.toJSONString(u);//{"age":34,"name":"aa"}
		System.out.println(jsonstring);
		
		List<User> list=new ArrayList<>();
		list.add(new User("laownag", 28));
		list.add(new User("xiaoming",14));
		//将java集合转化为json字符串
		String jString=JSON.toJSONString(list);
		System.out.println(jString);//挤成一行[{"age":28,"name":"laownag"},{"age":14,"name":"xiaoming"}]
		String jsonString2=JSON.toJSONString(list,true);//按好看的格式输出
		System.out.println(jsonString2);
		/*
		 * 漂亮格式输出:
[
	{
		"age":28,
		"name":"laownag"
	},
	{
		"age":14,
		"name":"xiaoming"
	}
]
		 */	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值