JS的JSON

一、对json的理解

json是一种数据格式,不是一种编程语言,json并不从属于javascript。

json的语法可以表示以下三种类型的值

1)简单值

与js相同的语法,可以在json中表示字符串(必须使用双引号,单引号会导致语法错误)、数值、布尔值、和null,但是不支持undefined。

2)对象

json的对象是一种复杂的数据类型,表示一组无序的键值对

 {
    "name": "Nicholas",
    "age": "27"
}         

3)数组

表示一组有序值的列表

json的数组表示:[25,‘hi‘,true]

注:数组也没有变量和分号

4)数组和对象结合的更复杂的数组集合

[ //JSON数组也没有变量和分号
{
    "title":"haha",
     "authors":[
        "1":"2",
        "3":"4"
    ]
},
"name":"xixi"
]        

  JSON与JavaScript的对象字面量的区别

//JavaScript对象字面量
var obj = {
    "name":"Nicholas",
    "age":29
};
//JSON对象
{
    "name":"Nicholas",
    "age":29
}

  1、没有声明变量(json没有变量的概念);

2、没有末尾的分号;

  3、JSON字符串必须使用双引号(单引号会导致语法错误);

二、解析与序列化

2.1 JSON对象 

  JSON对象有两个方法:

  stringify():把js对象序列化为json字符串

  parse():把json字符串解析为原生javascript值

var book = {
    title : "Professional JavaScript",
    authors : [
        "Nicholas C . Zakas"
    ],
    edition : 3,
    year : 2011
};
var jsonText = JSON.stringify(book);
alert(jsonText); // {"title":"Professional JavaScript","authors":["Nicholas C . Zakas"],"edition":3,"year":2011}

  默认的JSON.stringify()输出的JSON对象不包含任何空格字符或缩减。

  在序列化JavaScript对象时,所有的函数及原型对象都会被有意忽略,不体现在结果中。此外,值为undefined的任何属性也都会被跳过,结果中最终都是值为有效JSON数据类型的实例属性。

var bookcopy = JSON.parse(jsonText); //Object {title: "Professional JavaScript", authors: Array[1], edition: 3, year: 2011}

2.2 序列化选项

  JSON.stringify()可以接收三个参数,第一个参数是要序列化的javascript对象,第二个参数是一个过滤器,可以是一个数组也可以是一个函数;第三个参数是一个选项,表示是否在JSON字符串中保留缩进。

  当第二个参数是数组的时候,返回的结果只会包含数组里的属性;

var jsonText = JSON.stringify(book, ["title","edition"]); //{"title":"Professional JavaScript","edition":3}

  当是函数的时候,函数有两个参数,属性名和属性值,根据属性名可以知道应该序列化哪些属性,函数返回值就是相应键的值,如果函数返回undefined,则相应属性忽略。

var jsonText = JSON.stringify(book, function(key, value){
    switch(key){
        case "authors":
            return value.join(",");
        case "year":
            return 5000;
        case "edition":
            return undefined;
        default:
            return value;
    }
}); //{"title":"Professional JavaScript","authors":"Nicholas C . Zakas","year":5000}

第三个参数用与控制结果中的缩进与空白,参数是数值,表示每个级别缩进的空格数,最大缩进格数为10;参数也可以是一个字符串,如制表符或"- -",字符串长不能超过10;

  toJSON()方法:作为函数过滤器的补充,返回其自身的json数据格式。

var book = {
    title : "Professional JavaScript",
    authors : [
        "Nicholas C . Zakas"
    ],
    edition : 3,
    year : 2011,
    toJSON: function(){
        return this.title;
    }
};
var jsonText = JSON.stringify(book); //"Professional JavaScript"

  假设把一个对象传入JSON.stringify(),序列化该对象的顺序如下:

(1)如果存在toJSON()方法而且能通过它取得有效的值,则调用该函数。否则,返回对象本身。

(2)如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步返回的值。

(3)对第(2)步返回的每个值进行相应的序列化。

(4)如果提供了第三个参数,执行相应的格式化。

2.3 解析选项

  JSON.parse()也可以接收一个参数,参数是一个函数,称为还原函数(reviver),再将日期字符串转换成Date对象时,经常要用到还原函数。

var book = {
    title : "Professional JavaScript",
    authors : [
        "Nicholas C . Zakas"
    ],
    edition : 3,
    year : 2011,
    releaseDate : new Date(2011, 11,1)
};
var jsonText = JSON.stringify(book);
//{"title":"Professional JavaScript","authors":["Nicholas C . Zakas"],"edition":3,"year":2011,"releaseDate":"2011-11-30T16:00:00.000Z"}
var bookcopy = JSON.parse(jsonText, function(key, value){
    if(key == "releaseDate"){
        return new Date(value);
    } else {
        return value;
    }
}); //Object {title: "Professional JavaScript", authors: Array[1], edition: 3, year: 2011, releaseDate: Thu Dec 01 2011 00:00:00 GMT+0800 (中国标准时间)}
alert(bookcopy.releaseDate.getFullYear()); //2011

三、再说几句toJSON()

  toJSON 方法由 JSON.stringify 函数使用。 JSON.stringify 将 JavaScript 值序列化为 JSON 文本。 如果向 JSON.stringify 提供了 toJSON 方法,则在调用 JSON.stringify 时将调用 toJSON 方法。

toJSON 方法是 Date JavaScript 对象的内置成员。 它返回 UTC 时区的 ISO 格式日期字符串(由后缀 Z 表示)。

  可重写 Date 类型的 toJSON 方法,也可为其他对象类型定义 toJSON 方法,以实现在 JSON 序列化之前对特定对象类型进行数据转换。

var contact = new Object();
contact.firstname = "Jesper";
contact.surname = "Aaberg";
contact.phone = ["555-0100", "555-0120"];

contact.toJSON = function(key)
 {
    var replacement = new Object();
    for (var val in this)
    {
        if (typeof (this[val]) === ‘string‘)
            replacement[val] = this[val].toUpperCase();
        else
            replacement[val] = this[val]
    }
    return replacement;
};

var jsonText = JSON.stringify(contact);//{"firstname":"JESPER","surname":"AABERG","phone":["555-0100","555-0120"]}
时间: 2024-10-06 09:59:35

JS的JSON的相关文章

Java和js操作json

Js中 Json字符串转json对象 //将json格式的字符串转为json对象 var t = JSON.parse('{"name":123}'); alert(t.name); json对象转json字符串 //json对象数组. //packJson 为对象数组 packJson = [ {"name":"nikita", "password":"1111"}, {"name":

JS操作JSON总结

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不需要任何特殊的 API 或工具包.本文主要是对JS操作JSON的方法做下总结. 在JSON中,有两种结构:对象和数组. 1. 一个对象以“{”(左括号)开始,“}”(右括号)结束.每个“名称”后跟一个“:”(冒号):“‘名称/值’ 对”之间使用“,

java对象转JSON JS取JSON数据

JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new PropertyFilter() { @Override public boolean apply(Object arg0, String arg1, Object arg2) { // 过滤掉对象里的包含自己的属性(自己关联自己) if (arg1.equals("wareTypes") || arg1.equals("skillS&

js 将json字符串转换为json对象的方法解析(转)

js 将json字符串转换为json对象的方法解析 将json字符串转换为json对象的方法.在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键 例如: JSON字符串:var str1 = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str2 = { "name": &

《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

http://blog.csdn.net/mazhaojuan/article/details/8599167 先看一下我要实现的功能界面: 这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转换成JSON,然后传递到前台JS文件中,JS解析JSON数据,并将数据显示在界面,主要介绍两种显示方式,显示在DropDownList控件 or 显示在动态创建的Table表中.   本文主要介绍两个地方: 1.根据学年查询学期信息的实现--JS将解析的JSON数据绑定到DropDownList框

js读取json包装的map集合

后台 Map<String,Integer> map = new HashMap<>(); map.put("你好1", 1); map.put("你好2", 2); map.put("你好3", 3); map.put("你好4", 4); map.put("你好5", 5); Gson gson = new Gson(); String json = URLEncoder.enc

JSON基础 JS操作JSON总结

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 本文主要是对JS操作JSON的要领做下总结. 在JSON中,有两种结构:对象和数组. 1. 一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟

JS解析Json 数据并跳转到一个新页面,取消A 标签跳转

JS解析Json 数据并跳转到一个新页面,代码如下 $.getJSON("http://api.cn.abb.com/common/api/staff/employee/" + obj.id, function (result) { window.open("https://abb-my.sharepoint.com/_layouts/15/me.aspx?p=" + result.Email, "_blank") }); 取消A 标签跳转 &l

js便利json 数组的方法

js便利json 数组的方法 通过Jason对象获取里面某个键的值方法: 1,对象["键"]. 2,对象.键. 这篇文章主要介绍了JQuery遍历json数组的3种方法,本文分别给出了使用each.for遍历json的方法,其中for又分成两种形式,需要的朋友可以参考下 $(function () { var tbody = ""; //------------遍历对象 .each的使用------------- //对象语法JSON数据格式(当服务器端回调回来的对

JS中将JSON的字符串解析成JSON数据格式《转》

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