JavaScript JSON 格式操作

  关于JSON,最重要的是要理解它是一种数据格式,而不是一种编程语言。虽然具有相同的语法,但JSON并不从属于JavaScript。而且,并不是只有JavaScript才使用JSON,毕竟JSON只是一种数据格式。很多编程语言都有针对JSON的解析器和序列化器。

  首先,说一下JSON的语法,JSON由三种类型组成,简单、对象、数组。简单值包括数值、字符串、布尔值、null。对象由一组键值对组成,其中可以嵌套数组和对象。数组表示一组有序的值得列表,可以包含数组和对象。

console.log(JSON.parse(1))

  这样写是没有错的,可以直接解析数值,但是这个没有意义,一般实际运用中JSON都是以对象或数组的方式呈现。下面看看对象的表示法:

{
	"name" : "Miracle",
	"age" : 24
}

[1,2,"sd"]

  JSON的对象和数组与JavaScript的对象字面量和数组字面量很像,在JSON中所有的键都要用双引号包裹,否则会导致语法错误。而字符串的值也必须使用双引号包裹,不能使用单引号,因为会导致语法错误,在数组中也是一样。在JSON中对象可以包含数组,而同样数组也可以包含对象。

{
	"name" : "Miracle",
	"age" : 24,
	"skills" : ["AJAX", "ES5", "HTML5", "CSS3"],
	"friends" : [
		{
			"name" : "kirs",
			"age" : 23
		},
		{
			"name" : "HQ",
			"age" : 22
		}
	]
}

  上列代码最外围是一个对象,其中包含了2个简单值,和两个数组,而第二个数组"friends"中又包含了两个对象。

  

  解析与序列化

  在JSON对象诞生之前,JSON的解析一直是使用eval()函数,使用eval()对JSON数据结构求值存在风险,因为可能会执行一些恶意代码。ECMAScript 5对解析JSON的行为进行了规范,定义了全局对象JSON。支持这个对象的浏览器有IE8+、Firefox 3.5+、Safari 4+、 Chrome 和Opera 10.5+。

  JSON对象有两个方法:stringify()和parse()。stringify()用于将JSON对象的实例转换为JSON字符串,而JSON.parse()则将一个JSON字符串解析为JSON对象。

var jobj = {
	"name" : "Miracle",
	"age" : 24
}

var jtext = JSON.stringify(jobj);

console.log(jtext);			//‘{"name":"Miracle","age":24}‘
console.log(typeof jtext);	//string

var obj = JSON.parse(jtext);
console.log(obj.name);		//"Miracle"

  在执行JSON.stringify()方法的时候对于JS中的特殊值比如undefined,function类型会忽略掉当前的键值对。

var jobj = {
	"name" : "Miracle",
	"age" : 24,
	"un" : undefined,
	"getName" : function(){
		alert(0);
	}
}

console.log(JSON.stringify(jobj)); //‘{"name":"Miracle","age":24}‘

  上述代码中jobj对象中包含了一个键为"un",它的值是undefined由于JSON不识别这种基本类型,所以会将键和值全部忽略。JS中的funciton也是。

  JSON.stringify()方法一共有三个参数,第一个参数是要转化的对象,这个参数是必选项,第二个参数是过滤设置,可以是数组,也可以是function。第三个参数是一个格式化的设置,可以是字符串或者数值。注意这里的过滤和格式化都是对对象的操作。

var jobj = {
	"name" : "Miracle",
	"age" : 24,
	"siklls" : ["AJAX", "ES5", "HTML5", "CSS3"]
}

console.log(JSON.stringify(jobj, ["name"])); //‘{"name":"Miracle"}‘

  如果JSON.stringify()方法的第二个参数是一个数组,那么在执行的时候会匹配数组中的值与每个键的名称是否一样,如果有返回这个键值对,没有就忽略。如果一个都没有最终返回空对象字符串"{}"。

var jobj = {
	"name" : "Miracle",
	"age" : 24,
	"siklls" : ["AJAX", "ES5", "HTML5", "CSS3"]
}

var s = JSON.stringify(jobj, function(key, val){
	if(key == "name"){
		return "who are you?";
	}else if(key == "siklls"){
		return undefined;
	}else {
		return val;
	}
});

console.log(s);		//{"name":"who are you?","age":24}

  如果JSON.stringify()第二个参数是函数,那么根据函数返回的值来来匹配,如果函数自始至终都没有返回,那么结果就是undefined。这个函数接受两个参数,当前的键和值,然后根据结果返回当前键和改变后的值。例如代码中else if判断中 结果返回了undefined ,前面说过了如果返回的不是JSON类型的数据,JSON会自动过滤。

  JSON.stringify()方法的最后一个参数是用来格式化字符串。改参数是一个字符串或者数值类型。如果是数值,则使用当前数值的空格数来缩进,如果是字符串则使用字符串来缩进,注意,这里会自动换行。

var jobj = {
	"name" : "Miracle",
	"age" : 24,
	"siklls" : ["AJAX", "ES5", "HTML5", "CSS3"]
}

var s = JSON.stringify(jobj, null, 4);

console.log(s);

 

上图是使用Chromg 控制台查看的结果。

 

时间: 2024-10-07 00:41:11

JavaScript JSON 格式操作的相关文章

JS JSON格式操作

JSON是一种数据格式.JSON并不从属于JavaScript.而且,并不是只有JavaScript才使用JSON,毕竟JSON只是一种数据格式.很多编程语言都有针对JSON的解析器和序列化器.JSON由三种类型组成,简单.对象.数组.简单值包括数值.字符串.布尔值.null.对象由一组键值对组成,其中可以嵌套数组和对象.数组表示一组有序的值得列表,可以包含数组和对象. console.log(JSON.parse(1)); console.log(JSON.stringify(1)); 这样写

javascript json对象操作(基本增删改查)

/** * Json对象操作,增删改查 * * @author lellansin * @blog www.lellansin.com * @version 0.1 * * 解决一些常见的问题 * get/set 解决获取和设置时,无节点中断的问题 * create 可以创建多级节点,若存在则覆盖新值 * delete 删除节点及其子节点 * print_r 格式化输出对象(调试用) * 实例见底部 */ function Json() { } /** * 获取Json对象中的某个节点 * 例如

javascript、js操作json方法总结(json字符创转换json对象)

相信前端的同学们对json并不陌生,接触过很多.但是很少人知道json的全称是什么,哈哈,我也是查资 料知道的.(JSON JavaScript Object Notation是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.) json可以以数组传递,也可以以对象传递,我前面的文章PHP对发布版本时间轴数据处理,返回的json格式,是一个数组json,然后里面含有对象,这是json常见的格式.后来经过php的处理,结构又发生了变化,最外层是一个对象了,里面是数组和

使用Javascript Ajax 通信操作JSON数据 [下]

上一篇文章我们获得后台数据库的数据后转换成json格式然后返回到前台,但只是返回的一位数组,这次我们返回二维和三维数组和对象. 前台代码shizhan.html: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>json数据获取</title> 5 <meta charset="utf-8"> 6 <script src='jquery.js'></scr

JSON(二)——JavaScript中js对象与JSON格式字符串的相互转换

首先我们来看一下js中JSON格式的字符串 var JSONStr1 = "{\"name\" : \"张三\"}"; 注意以下的写法不是js中JSON格式的字符串,它只是一个js的字符串. var JSONStr2 = "{'name' : '张三'}"; 我们看JSON语法中对于字符串的定义:是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义.一个字符(character)即一个单独的字符串(characte

JavaScript处理json格式数据

JSON即JavaScript对象标记,是一种轻量级的数据交换格式,非常适用于服务器与JavaScript的交互.JSON是基于纯文本的数据格式. JSON是JavaScript的原生格式,可以使用JSON传输一个简单的String.Number.Boolean.数组.复杂的Object对象. JSON表示数组时,使用[]包含所有元素,每个元素用逗号分隔:Object对象在JSON中使用{}包含一系列无序的Key-Value键值对,value也可以表示一个Object或数组. JavaScrip

JAVA操作JSON格式数据

由于近些日子公司在弄微信项目,而微信官方API所提供的接口当中,有些需要以POST方式进行请求,且数据传输格式要求为JSON格式数据,之前没怎么研究过,而且传递的数据格式相对也比较简单,所以直接都是采用的字符串拼接的方式进行组装的,之后再用String.format格式化一下就好了. //需要提交的json数据 String jsonData = "{\"openid\":\"%s\",\"to_groupid\":%d}";

javascript 解析ajax返回的xml和json格式的数据

写个例子,以备后用 一.JavaScript 解析返回的xml格式的数据: 1.javascript版本的ajax发送请求 (1).创建XMLHttpRequest对象,这个对象就是ajax请求的核心,是ajax请求和响应的信息载体,单是不同浏览器创建方式不同 (2).请求路径 (3).使用open方法绑定发送请求 (4).使用send() 方法发送请求 (5).获取服务器返回的字符串   xmlhttpRequest.responseText; (6).获取服务端返回的值,以xml对象的形式存

使用Javascript Ajax 通信操作JSON数据 [上]

以前只是知道json的格式而已,也做过的是从数据库获得数据然后弄成json的格式然后赋给HighCharts生成曲线,先把数据库的数据使用array()函数转换成数组,然后使用json_encode()函数将数组格式转换为json格式,从而再传输给HighCharts中的代码,从而生成曲线. (json_code()和json_encode()的作用是一样的) 今天加强了json_code()函数和json_decode()函数的学习,通过$.GET()来获得后台的数据然后输出到前台. 下面是前