JS-补充-json,符号优先级

====JSON.parse

JSON.parse(text,callback(k,v)) 方法解析一个JSON字符串

返回值:对象(对应的text文本)

参数:

text要解析的json字符串

callback(k,v)可选的回调函数//规定了原始值在被返回之前如何被解析改造

//例1:

JSON.parse(‘{}‘);              // {}

JSON.parse(‘true‘);            // true

JSON.parse(‘"foo"‘);           // "foo"

JSON.parse(‘[6, 6, "hello"]‘);     // [6, 6, "hello"]

JSON.parse(‘null‘);             // null

JSON.parse() 不允许用逗号作为结

JSON.parse("[1, 2, 3, 4, ]")//错误

JSON.parse(‘{"foo" : 1, }‘)//错误

JSON格式的字符串,必须遵循JSON规范,keyvalue都以引号引起来(而且,外部用单引号,内部用双引号)//否则解析不出来会报错

var person_json=JSON.parse(‘{"name":"jack","age":"19","phone":"182"}‘)

console.log(person_json["name"])

//例2:(基础好的掌握)

2.1

var obj=JSON.parse(‘{"p": 5}‘, function (k, v) {

if(k === ‘‘) return v;     // 如果到了最顶层,则直接返回属性值,

return v * 2;              // 否则将属性值变为原来的 2 倍。

});

console.log(obj)

// { p: 10 }

2.2

JSON.parse(‘{"1": “hello”, "2": 2,"3": {"4": 4, "5": {"6": 6}}}‘, function (k, v) {

console.log(k); // 输出当前的属性名,从而得知遍历顺序是从内向外的,

// 最后一个属性名会是个空字符串。

return v;       // 返回原始属性值,相当于没有传递 回调参数。

});

如果指定了回调函数,则解析出的对象值(解析值)会经过一次转换后才将被最终返回(返回值)。更具体点讲就是:解析值本身以及它所包含的所有属性,会按照一定的顺序(从最最里层的属性开始,一级级往外,最终到达顶层,也就是解析值本身)分别的去调用 回调函数,在调用过程中,当前属性所属的对象会作为 this 值,当前属性名和属性值会分别作为第一个和第二个参数传入回调函数中。如果 回调返回 undefined,则当前属性会从所属对象中删除,如果返回了其他值,则返回的值会成为当前属性新的属性值。

当遍历到最顶层的值(解析值)时,传入回调函数的参数会是空字符串 ""(因为此时已经没有真正的属性)和当前的解析值(有可能已经被修改过了),当前的 this 值会是 {"": 修改过的解析值}

====JSON.stringify

JSON.stringify(value,replacer,space ) 方法将对象转换为JSON字符串

返回值:json字符串

参数:

value:将要序列化的对象

 

后面两个可选参数,基础好的掌握:

replacer:

①如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;注:这个函数第一次调用的时候replacer(k,v) k值是没有的,v值就是对象自己,后面调用传入的是对象内部的属性,并且按照属性名的ASCII表的顺序来分别调用.

如果返回一个 Number, 转换成相应的字符串被添加入JSON字符串。//return 5   “5”

如果返回一个 String, 该字符串作为属性值被添加入JSON//return “hello” “hello”

如果返回一个 Boolean, "true" 或者 "false"被作为属性值被添加入JSON字符串。

如果返回任何其他对象,该对象递归地序列化成JSON字符串,对每个属性调用replaceer方法。除非该对象是一个函数,这种情况将不会被序列化成JSON字符串。

如果返回undefined,该属性值不会在JSON字符串中输

:对象中属性值为字符串的属性除外,将这个对象变为json格式的字符串

var obj={“name”:”karen”,”age”:46,”beatiful”:true,”tel”:”136xxx”}

function replacer(k,v){

 if(typeof(v)===’string’){return undefined}

return v

}

var jsonStr=JSON.stringify(obj,replacer)

②如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;

var obj={“name”:”karen”,”age”:46,”beatiful”:true,”tel”:”136xxx”}

var arr=[‘age’,’tel’]

var jsonStr=JSON.stringify(obj,arr)

 

 

③如果该参数为null或者未提供,则对象所有的属性都会被序列化;

 

 

Space:

用来控制结果字符串里面的间距。如果是一个数字, 则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多10个空格);如果是一个字符串,则每一级别会比上一级别多缩进用该字符串(或该字符串的前十个字符)

var obj=JSON.stringify({ name: 1, age : 2 }, null,0)

alert(obj)

var obj=JSON.stringify({ name: 1, age : 2 }, null,10)

alert(obj)

var obj=JSON.stringify({ name: 1, age : 2 }, null,”heihei”)

alert(obj)

====符号优先级

1---

圆括号---()

2--

成员访问(从左到右)---p1.name

new带参数---new Person()

3----

函数调用(从左到右)----fn(10)

new无参数---new person

4----

后置递增---a++

后置递减----a--

5----

逻辑非(从右到左)----!true

按位非(从右到左)----~20

一元加法(从右到左)----  -20

一元减法(从右到左)---- +0

前置递增(从右到左)---- ++a

前置递减(从右到左)-----  --a

Typeof(从右到左)----- typeof p1

6----

乘(从左到右)----20*10

除(从左到右)----a/2

求余(从右到左)----20%3

7----

加(从左到右)----a+b

减(从左到右)----a-b

8----

小于(从左到右)----a<b

小于等于(从左到右)----a<=b

大于(从左到右)----a>b

大于等于(从左到右)----a>=b

in(从左到右)----for(k in arr)

instanceof(从左到右)----p1.instanceof(Person)

9----

等号(从左到右)----a==b

非等号(从左到右)----a!=b

全等号(从左到右)----a===b

非全等号(从左到右)---a!==b

10----

按位与(从左到右)----2&3

11---

按位异或(从左到右)----10^20

12---

按位或(从左到右) ----10|10

13---

逻辑与(从左到右)----true&&true

14----

逻辑或(从左到右)----false||true

15---

三目运算符(从右到左)---- a?b:c

16---

赋值(从右到左)----a=20

17----

逗号(从左到右)---- for(var a=20;a++,a++,a++,a<10;a++){}

时间: 2024-08-09 14:46:51

JS-补充-json,符号优先级的相关文章

JS 实现Json查询的方法实例

其实很简单,我这部分代码,前一部分是简单的实现如何使用JS写模板,第二个就是具体的实现了JSON查询的一个扩展. 以后查询Json就有了利器了. 代码如下: /*         * 定义模板函数        */        var template = function (queryArr) { var count = 0; for (var i = 0; i < queryArr.length; i++) { var e = queryArr[i]; if ($express) {  

js补充、jquery

今日内容 js补充 标签属性操作 // 设置 setAttribute('属性名', '属性值') // input_obj.checked = true; 添加选中效果 // 获取 getAttribute('属性名') // console.log(inputobj.checked); 查看属性值 // 删除 removeAttribute('属性名') class类值操作 var div1 = document.getElementById('d1'); div1.className; /

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. 一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟