关于JS中的JSON

昨天按老大的要求,制作一功能,里面有一个需要从jsp页面封装参数的地方,如下

之前我自己写的时候,每个value值,我没有给他们加双引号(单引号),然后界面一直出不来,而且也不报错,在这个一块花费了很长的时间,老大看不下去了,来到我这看了下代码,一下子就指出这说“你这value怎么没有加双引号啊,这样js会将它们当做一个变量,而不是字符串对象,那些数字可以不用加,但是一些字符串需要加双引号才行!!!”加上双引号之后,界面立马就出来了。。。。果然是老大,在这,我也注意到了加不加双引号在js与json的重要性!下面是我找的一篇blog,把parse(),stringify()都讲解了一遍,分享给大家

http://www.cnblogs.com/gaojun/p/3394274.html

早期,一般是使用XML作为互联网上传输结构化数据的,但由于它解析麻烦,字符冗长,因此被轻量级的JSON所逐渐替代。JSON是JavaScript的一个严格子集,利用了JavaScript中一些模式来表示结构化的数据。可以直接将JSON格式的字符串传递给eval()进行处理,由于JSON是JS的子集,eval后变成json对象,可以使用’.’操作符直接操作属性;

值得注意:JSON是一种数据格式,不是一种语言,虽然与JS中定义对象字面量的形式相似,但JSON不从属于JavaScript,因为其它语言(如:PHP,JSP)中也有针对JSON的解析和序列化的方法操作。

语法

 JSON可以表示以下三种值:

简单值:如字符串、数值、布尔值和null,但不支持undefined
对象:对象作为一种复杂的数据类型,表示是一组无序的键值对儿,值可以是简单值也可以复杂的数据
数组:数组作为一种复杂的数据类型,表示是一组有序的列表儿,可以通过索引来获取引用的值,值可以是简单值,也可以复杂数据对象

一个简单的JSON示例:

{
    "name": "Jack",
    "age": 30,
    "isMan": true,
    "school": {
        "name": "Lonton University",
        "location": "English"
    }
}

非常重要:JSON对象的属性(如上例中的“name”)必须加双引号。

在实际使用中,经常会因为上面使用单引号或不使用引号造成序死化错误,从而无法生成JSON对象

序列化

 JSON被大家所认可,除了语法是JavaScript语法子集,更主要是可以直接eval序列化(但有一定风险,可能会执行一些恶意代码,如读cookie等)成可用的JS对象直接使用。ECMAScript 5对解析JSON进行规范,定义了全局对象JSON,支持的浏览器有:IE8+,Firefox 3.5+,Safari4+,Chrome和Opera 10.5+;

 JSON对象提供两个方法:stringify()和parse(),stringify()是将JSON对象转成字符串,而parse()则是将符合规范的字符串转成可用JSON对象。

stringify()

JSON.stringify(value [, replacer] [, space]) 

  value:JSON对象。
  replacer:过滤器(可选的),可以是方法或数组,用于过滤操作,如果是数组,则序列化字符串只包含数组中指定的值的JSON属性及属性值,如果是方法,方法传递key,value,可以对JSON对象每一个属性值及值进行处理后返回。

  space:是否保留缩进,默认不保留,并且删除所有换行。

1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来
2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.
3.如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。
4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。

   实例:

var student = new Object();
student.name = "Lanny";
student.age = "25";
student.location = "China";
var json = JSON.stringify(student);
alert(json); //{"name":"Lanny","age":"25","location":"China"}

  使用数组过滤,只保留:name及locaiton

var json = JSON.stringify(student,["name","location"]);
alert(json);//{"name":"Lanny","location":"China"}

  使用函数过滤,对于name属性值单独处理,在之前输出:”my name is :”

var json = JSON.stringify(student, function (key, value) {
    switch (key){
        case "name":
            return "my name is " + value;
        default :
            return value;
    }
});
alert(json);//{"name":"my name is Lanny","age":"25","location":"China"}

  使用缩进,缩进4个空白:

var json = JSON.stringify(student,null,4);

alert(json);

//返回结果如下:

{

    "name": "Lanny",

    "age": "25",

    "location": "China"

}

parse()

JSON.parse(text [, reviver])

参数

      text :必需。 一个有效的 JSON 字符串。 

       reviver :可选。 一个转换结果的函数。 将为对象的每个成员调用此函数。 如果成员包含嵌套对象,则先于父对象转换嵌套对象。 对于每个成员,会发生以下情况:

如果 reviver 返回一个有效值,则成员值将替换为转换后的值。

如果 reviver 返回它接收的相同值,则不修改成员值。

如果 reviver 返回 null 或 undefined,则删除成员。

返回值:一个对象或数组

示例:

var jsontext = ‘{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}‘;
var contact = JSON.parse(jsontext);

以下示例演示了如何使用 JSON.stringify 将数组转换成 JSON 字符串,然后使用 JSON.parse 将该字符串还原成数组。

var arr = ["a", "b", "c"];
var str = JSON.stringify(arr);
document.write(str);
document.write ("<br/>");
var newArr = JSON.parse(str);
while (newArr.length > 0) {
    document.write(newArr.pop() + "<br/>");
}
// Output:
var arr = ["a", "b", "c"];
var str = JSON.stringify(arr);
document.write(str);
document.write ("<br/>");

var newArr = JSON.parse(str);

while (newArr.length > 0) {
    document.write(newArr.pop() + "<br/>");
}

// Output:
["a","b","c"]
c
b
a

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-21 21:25:37

关于JS中的JSON的相关文章

在js中 把 json对象转化为String对象的方法

方法1: 使用js的扩展方法 ** * json对象转字符串形式 */ function json2str(o) { var arr = []; var fmt = function(s) { if (typeof s == 'object' && s != null) return json2str(s); return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s; } for (v

JS中:json对象数组按对象属性排序

var array = [ {name: 'a', phone: 1}, {name: 'b', phone: 5}, {name: 'd', phone: 3}, {name: 'c', phone: 4} ] array.sort(getSortFun('desc', 'phone')); function getSortFun(order, sortBy) { var ordAlpah = (order == 'asc') ? '>' : '<'; var sortFun = new F

js中的json对象详细介绍

JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包. JSON的规则很简单:对象是一个无序的“‘名称:值'对”集合.一个对象以“{”(左括号)开始,“}”(右括号)结束

js中定义json生成Tree树

这里说名的是js中生成json       arry是js中定义的json 树插件是jquery.ztree var param = { }; $.post("manager_treeList", param, function(data) { //循环列表 var setting = { view: { dblClickExpand: false, showLine: true, selectedMulti: false }, data: { simpleData: { enable

MVC中处理Json和JS中处理Json对象

事实上,MVC中已经很好的封装了Json,让我们很方便的进行操作,而不像JS中那么复杂了. MVC中: public JsonResult Test() { JsonResult json = new JsonResult { Data = new { Name = "zzl", Sex = "male", } }; return Json(json); }   public JsonResult TestList() { List<User> user

js中把JSON字符串转换成JSON对象最好的方法

在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 第一种解析方式:使用eval函数来解析,并且使用jQuery的each方法来遍历 用jQuery解析JSON数据的方法,作为jQuery异步请求的传输对象,jQuery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明. 这里首先

js中的json对象

1.JSON(JavaScript Object  Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不须要不论什么特殊的API或工具包. JSON的规则非常easy:对象是一个无序的"'名称:值'对"集合.一个对象以"{"(左括号)開始,"}"(右括号)结束.每一个"名称"后跟一个":"(冒号):"'名称

js中解析json时候的eval和$.parseJSON()的区别以及JSON.stringify()

1.第一个区别是:安全性 json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢?      JSON.parse()之可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,而eval()则可以解析任何字符串,eval是不安全的 如: var str = 'alert(1000.toString())'; eval(str); JSON.parse(str);  用eval可以解析,并

js 中读取JSON的方法探讨

方法一:函数构造定义法返回 var strJSON = "{name:'json name'}";  //得到的JSONvar obj = new Function("return" + strJSON)()  ;//转换后的JSON对象alert(obj.name);   //json name 方法二:js中著名的eval函数   //ie8及以下 无法使用var strJSON = "{name:'json name'}";//得到的JSO