Json杂谈系列------(一)初始json

1. JSON 是什么

JSON,全称是 JavaScript Object Notation,即 JavaScript 对象标记法。这是一种轻量级(Light-Weight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。

JSON 的名称中虽然带有 JavaScript,但这是指其语法规则是参考 JavaScript 对象的,而不是指只能用于 JavaScript 语言。实际上很多语言(如 C++、Java、PHP 等)都配有 JSON 的解析和生成器。

JSON 无论对于人,还是对于机器来说,都是十分便于阅读和书写的,而且相比 XML (另一种常见的数据交换格式),文件更小,因此迅速成为网络上十分流行的交换格式。

2. JSON 的语法规则

  1. 数组(Array)用方括号(“[]”)表示。
  2. 对象(Object)用大括号(”{}”)表示。
  3. 名称/值对(name/value)之间用冒号(”:”)隔开。
  4. 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
  5. 并列的数据之间用逗号(“,”)分隔
  6. 数组或对象的每个成员的值,可以是简单值,也可以是复合值

需要注意的是,空数组和空对象都是合格的JSON值,null本身也是一个合格的JSON值。

简单案例:

//描述学生信息的案例
{
    "name":"zhangsan",
    "age":23,
    "sex":"male",
    "class":"Computer Science",
    "studentNumber":"20120101",
    course:[
    {courseNo:"2015001","courseName":"数据结构",teacherName":"Lisi"},
    {courseNo:"2015002","courseName":"数据库原理",teacherName":"Wangwu"}
    ]
}

3. JSON 和 XML

JSON 常被拿来与 XML 做比较,因为 JSON 的诞生本来就多多少少要有取代 XML 的意思。相比 XML,JSON 的优势如下:

  • 没有结束标签,长度更短,读写更快
  • 能够直接被 JavaScript 解释器解析
  • 可以使用数组

下面是描述同样信息的 XML 文件和 JSON 文件,来看看区别。JSON:

{
    "name": "Geoff Lui",
    "age": 26,
    "isChinese": true,
    "friends":["Lucy", "Lily", "Gwen"]
}

XML:

<root>
    <name>Geoff Lui</name>
    <age>Geoff Lui</age>
    <friends>Lucy</friends>
    <friends>Lily</friends>
    <friends>Gwen</friends>
</root>

可以看到,描述同样的信息,XML 更加麻烦,而 JSON 要轻巧得多,在有数组出现的情况下更加明显。而且,当数组项很多的时候,XML 文件中的大量信息都被用于描述没什么用的标签上了。

但是,绝不是说 XML 就一无是处,要完全放弃,归根结底还是要看有怎样的开发要求。

4.JSON对象

处理JSON格式的数据。它有两个方法:JSON.stringify和JSON.parse。

4.1、stringify()

JSON.stringify方法用于将一个值转为字符串。该字符串符合JSON格式,并且可以被JSON.parse方法还原。

JSON.stringify("somestring") // "somestring"
JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"

JSON.stringify([1, "false", false])
// ‘[1,"false",false]‘

JSON.stringify({ "name": "张三" })
// ‘{"name":"张三"}‘

需要注意的是,对于原始类型的字符串,转换结果会带双引号,即字符串somestring会被转成"somestring",这是因为将来还原的时候,双引号可以让JavaScript引擎知道,abc是一个字符串,而不是一个变量名。

如果原始对象中,有一个成员的值是undefined、函数或XML对象,这个成员会被省略。如果数组的成员是undefined、函数或XML对象,则这些值被转成null。

JSON.stringify({
    f : function () {},
    a : [function () {}, undefined]
});
// "{"a":[null,null]}"

JSON.stringify方法会忽略对象的不可遍历属性。

var obj = {};
Object.defineProperties(obj, {
  ‘foo‘: {
    value: 1,
    enumerable: true
  },
  ‘bar‘: {
    value: 2,
    enumerable: false
  }
});

JSON.stringify(obj); // {"foo":1}

JSON.stringify方法还可以接受一个数组参数,指定需要转成字符串的属性。

console.log(JSON.stringify({ name:"zhangsan", age:22 }, [‘name‘]));
        //  {"name":"zhangsan"}

JSON.stringify方法还可以接受一个函数作为参数,用来更改默认的字符串化的行为。

function f(key, value) {
  if (typeof value === "number") {
    value = 2 * value;
  }
  return value;
}

JSON.stringify({ a:1, b:2 }, f)
// ‘{"a":2,"b":4}‘

JSON.stringify还可以接受第三个参数,用于增加返回的JSON字符串的可读性。如果是数字,表示每个属性前面添加的空格(最多不超过10个);如果是字符串(不超过10个字符),则该字符串会添加在每行前面。

JSON.stringify({ p1:1, p2:2 }, null, 2);
// "{
  "p1": 1,
  "p2": 2
}"

JSON.stringify({ p1:1, p2:2 }, null, "|-");
// "{
|-"p1": 1,
|-"p2": 2
}"

如果JSON.stringify方法处理的对象,包含一个toJSON方法,则它会使用这个方法得到一个值,然后再将这个值转成字符串,而忽略其他成员。

JSON.stringify({
  toJSON: function() {
    return "Cool"
  }
})
// "Cool""

var o = {
  foo: ‘foo‘,
  toJSON: function() {
    return ‘bar‘;
  }
};
var json = JSON.stringify({x: o});
// ‘{"x":"bar"}‘

toJSON方法的一个应用是,可以将正则对象自动转为字符串。

RegExp.prototype.toJSON = RegExp.prototype.toString;

JSON.stringify(/foo/)
// "/foo/"

4.2、JSON.parse()

JSON.parse方法用于将JSON字符串转化成对象。

JSON.parse(‘{}‘) // {}
JSON.parse(‘true‘) // true
JSON.parse(‘"foo"‘) // "foo"
JSON.parse(‘[1, 5, "false"]‘) // [1, 5, "false"]
JSON.parse(‘null‘) // null

var o = JSON.parse(‘{"name":"张三"}‘);
o.name // 张三

如果传入的字符串不是有效的JSON格式,JSON.parse方法将报错。为了处理解析错误,可以将JSON.parse方法放在try...catch代码块中。

JSON.parse方法可以接受一个处理函数,用法与JSON.stringify方法类似。

function f(key, value) {
  if ( key === ""){
      return value;
  }
  if ( key === "a" ) {
    return value + 10;
  }
}

var o = JSON.parse(‘{"a":1,"b":2}‘, f);
o.a // 11
o.b // undefined
  1. 参考链接:JSON.parse()
  2. 阮一峰的教程
时间: 2024-10-24 02:21:09

Json杂谈系列------(一)初始json的相关文章

Json.Net系列教程——Linq To JSON 【赞】

一.Linq to JSON是用来干什么的? Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和修改部分的数据而非反序列化全部. 二.创建JSON数组和对象 在进行Linq to JSON之前,首先要了解一下用于操作Linq to JSON的类. 类名 说明 JObject  用于操作JSON对象 JArray  用语操作JSON数组 JValue

Java入门系列:处理Json格式数据

本节主要讲解: 1)json格式数据处理方法 2)第三方工具包的使用方法 3)java集合数据类型 [项目任务] 编写一个程序,显示未来的天气信息. [知识点解析] 为了方便后面代码的分析,先需要掌握几个相关的知识. 1.什么是json格式数据 从结构上看,我们所见到的所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是

json学习系列(6)JSONObject和JSONArray是JDK的集合部分延伸

我一直觉得JSONObject和JSONArray是JDK集合部分的延伸,它们与JDK的List和Map一脉相承.通过研究JSONObject和JSONArray的结构,我们顺便也复习一下JDK的内容. 首先看一下JSONObject和JSONArray 的结构: final class JSONObject extends AbstractJSON implements JSON, Map, Comparable final class JSONArray extends AbstractJS

json学习系列(3)-JSONObject的过滤设置

我们通常对一个json串和java对象进行互转时,经常会有选择性的过滤掉一些属性值.例如下面的实体类: package com.pcitc.json; /** * Person实体类 * * @Description * @author admin * @created 2015年6月29日 下午4:08:40 * @version * @history * @see */ public class Person { private String name; private String add

JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List&lt;T&gt;转JSON,JSON转List&lt;T&gt;,JSON转C#对象

一.JSON解析与字符串化                                                                                            JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 filter,指定要序列化的属性名 indent,格式化为可读的代码,可指定分隔符或指定的缩进空格个数 var man

python对json的相关操作以及json模块的简要分析

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成. JSON有两种结构: 第一种就是"名称/值"对的集合.在python中相当于字典类型,在其他语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array). 第二种就是值的有序列表

JSON在线解析,新版本JSON在线解析

SOJSON,出了新版本的JSON在线解析,真的很好用,可以上下版本.左右版本.效果图如下.它的网址是:http://www.sojson.com/simple_json.html SOJSON集成了很多优秀的工具,它的网站:http://www.sojson.com/ JSON在线解析左右版本 JSON在线解析上下版本 JSON在线解析,JSON压缩 JSON在线解析,显示JSON数据类型 JSON在线解析,显示JSON 数组角标 赋值结果,测试Demo json

JS解析json数据(如何将json字符串转化为数组)

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2 <HTML> 3 <HEAD> 4 <TITLE> New Document </TITLE> 5 6 <SCRIPT LANGUAGE="JavaScript"> 7 8 var t="{'firstName': 'cyra', 'lastName':

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

  先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面中有所体现,这里不再赘述,此篇文章主要介绍:我是如何通过js从前台获取数据,然后通过ajax技术向后台一般处理程序传递JSON,后台又是如何获取传来的JSON,并对JSON数据转换,然后将转换后的数据写入数据库的! 介绍这些步骤实现前,先说说自己的辛酸:絮叨辛酸,是因为为了实现这个功能,我真的用了很