慎用for in函数(有可能由于原型链的问题导致遍历问题);

如果要是用for in  一定要使用if (obj1.hasOwnProperty(key)) {}先做判断

解决方法 :1.eval(),也不推荐

    2.for of (es6)

对JSON对象的key值处理方法

  1. var json = '{"a":"1", "b":"2"}';
  2. var data = eval('('+ json +')');
  3. alert(data.a);
  4. alert(data['a']);

这样两种方式都可以取到json中的值。

但是当key的值为数字时,只能使用类似数组下表的访问方式取值。

  1. var json = '{"0":"a", "1":"b", "length":2}';
  2. var data = eval('(' + json + ')');
  3. //alert(data.0);    //报错,此方式不可用
  4. alert(data['0']);
  5. alert(data[0]);    //注意此写法与数组用下标访问是相同的
  6. alert(data.length)  //貌似数组的长度

1.使用json时,通常都使用第一种方式,且key一般应使用合法的变量名(字母或下划线开头的包括字母、下划线和数字的字符串)

2.对象的两种访问方式:data.key和data[’key’]各自有自己的应用场景,一般情况使用data.key即可,也比较直观(它符合其它高级语言中访问对象中属性的方式);

当key为一个变量时,并且使用在循环中,用data['key']这种方式。

  1. for(var i=0; i < 10; i++) {
  2. s += data['key' + i];  //循环调用,可简化代码
  3. }

3.第三种采用数字做key的方式,虽然不推荐,但也是有其应用价值的;

如当建立一个与数据库中id一一对应的map对象的时候,

可直接用id的数值做key,虽然你可以给它加上一个字母前缀来让它符合合法的变量名的标准,

并让它的数据能通过data.key的方式访问,

但如果数据量非常大的话,

为每个id都加一个前缀,+字符连接运算也是要消耗性能的,

特别是在很少需要采用data.key方式去访问属性的情况下,

那么可以抛弃此调用方式,直接用数字做key也未尝不可,

除了key名称不符合合法变量名的标准之外,似乎并没有其它损失;

实例运用

使用obj[]来取值

var obj1 = { '2': '2b', '1': '1a', 4: '4d', 3: '3c' };
var arr = ['1', '2'];
for (var i = 0; i < arr.length; i++) {
    console.log(obj1[arr[i]]);
}
 
 

json常用遍历方法

-----------------------------------------------------------------------------------------------------------------------------------------------

在JSON中,有两种结构:对象和数组。

1.对象

一个对象以“{”开始,“}”结束。每个“key”后跟一“:”,“‘key/value' 对”之间运用 “,”分隔。

1
packJson = {"name":"caibaojian.com", "password":"111"}

2.数组

1
packJson = [{"name":"caibaojian.com", "password":"111"}, {"name":"tony", "password":"111"}];

数组是值的有序集合。一个数组以“[”开始,“]”结束。值之间运用 “,”分隔。

JSON对象和JSON字符串的转换

在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

JSON字符串:

1
var jsonStr = '{"name":"caibaojian", "password":"1111"}';

JSON对象:

1
var jsonObj = {"name":"caibaojian.com", "password":"1111"};

1、String转换为Json对象

1
var jsonObj = eval('(' + jsonStr + ')');

2.Json对象转换为String字符串

1
var jsonStr = jsonObj.toJSONString();

jQuery遍历json对象

grep

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script type='text/javascript' src="/jquery.js"></script>
<script type="text/javascript">
$().ready(
function(){
var array = [1,2,3,4,5,6,7,8,9];
var filterarray = $.grep(array,function(value){
return value > 5;//筛选出大于5的
});
for(var i=0;i<filterarray.length;i++){
alert(filterarray[i]);
}
for (key in filterarray){
alert(filterarray[key]);
}
}
);
</script>

each

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type='text/javascript' src="/jquery.js"></script>
<script type="text/javascript">
$().ready(
function(){
var anObject = {one:1,two:2,three:3};//对json数组each
$.each(anObject,function(name,value) {
alert(name);
alert(value);
});
var anArray = ['one','two','three'];
$.each(anArray,function(n,value){
alert(n);
alert(value);
}
);
}
);
</script>

inArray

1
2
3
4
5
6
7
8
9
10
11
<script type='text/javascript' src="/jquery.js"></script>
<script type="text/javascript">
$().ready(
function(){
var anArray = ['one','two','three'];
var index = $.inArray('two',anArray);
alert(index);//返回该值在数组中的键值,返回1
alert(anArray[index]);//value is two
}
);
</script>

map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script type='text/javascript' src="/jquery.js"></script>
<script type="text/javascript">
$().ready(
function(){
var strings = ['0','1','2','3','4','S','6'];
var values = $.map(strings,function(value){
var result = new Number(value);
return isNaN(result) ? null:result;//isNaN:is Not a Number的缩写
}
);
for (key in values) {
alert(values[key]);
}
}
);
</script>

原生js遍历json对象

遍历json对象:

无规律:

1
2
3
4
5
6
7
8
<script>
var json = [{dd:'SB',AA:'东东',re1:123},{cccc:'dd',lk:'1qw'}];
for(var i=0,l=json.length;i<l;i++){
for(var key in json[i]){
alert(key+':'+json[i][key]);
}
}
</script>

有规律:

1
2
3
4
5
6
7
8
9
10
11
12
13
packJson = [
 
{"name":"nikita", "password":"1111"},
 
{"name":"tony", "password":"2222"}
 
];
 
for(var p in packJson){//遍历json数组时,这么写p为索引,0,1
 
  alert(packJson[p].name + " " + packJson[p].password);
 
}

也可以用这个:

1
2
3
4
5
for(var i = 0; i < packJson.length; i++){
 
  alert(packJson[i].name + " " + packJson[i].password);
 
}

遍历json对象

1
2
3
4
5
6
7
myJson = {"name":"caibaojian", "password":"1111"};
 
for(var p in myJson){//遍历json对象的每个key/value对,p为key
 
  alert(p + " " + myJson[p]);
 
}

有如下 json对象:

1
2
3
4
5
6
var obj ={"name":"冯娟","password":"123456","department":"技术部","sex":"女","old":30};
遍历方法:
for(var p in obj){
str = str+obj[p]+',';
return str;
}

对Json的各种遍历方法的更多相关文章

  1. JSON对象与JSON数组的长度和遍历方法

    JSON对象与JSON数组的长度和遍历方法         1.json对象的长度与遍历                 结构:var json={“name”:”sm”,”sex”:”woman”} ...

  2. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  3. 对json数据的遍历

    json格式变化多样,可嵌套好几层,这里只记录了一些遍历方法,具体数据格式具体分析~ "data1": { "key1": [ {"name" ...

  4. [转]jquery 对 Json 的各种遍历

    原文地址:http://caibaojian.com/jquery-each-json.html 概述 JSON(javascript Object Notation) 是一种轻量级的数据交换格式,采 ...

  5. jquery 对 Json 的各种遍历

    grep <script type='text/javascript' src="/jquery.js"></script> <script type ...

  6. 关于json对象的遍历

    json格式的数据越来越多的在web开发中起到重要作用.下面介绍对于json对象和数组经常用到解析方法. var obj ={”name”:”冯娟”,”password”:”123456″,”depa ...

  7. C# JToken类的使用,实现解析动态json数据、遍历、查找

    在原来解析json数据是,一般都是用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化,一旦遇到动态的json数据,这种方法就不使用. 为了解决动态解析js ...

  8. jQuery通用的全局遍历方法$.each()用法实例

    1.jQuery通用的全局遍历方法$.each()用法 2. test.json文件代码: 3. html代码 4.jQuery代码 <script src="jquery-1.3.1 ...

  9. 转载:jquery 对 Json 的各种遍历

    概述 JSON(javascript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式 ...

随机推荐

  1. IDEA.环境

    1.下载: https://www.jetbrains.com/idea/download/#section=windows 安装的版本是:Ultimate:ideaIU-2017.3.3.exe 2 ...

  2. Android 数据库 ObjectBox 源码解析

    一.ObjectBox 是什么? greenrobot 团队(现有 EventBus.greenDAO 等开源产品)推出的又一数据库开源产品,主打移动设备.支持跨平台,最大的优点是速度快.操作简洁,目 ...

  3. form表单提交数据的数据格式

    form表单提交的数据格式默认是 enctype="application/x-www-form-urlencoded"这样将input框的数据与input框的name属性以键值对 ...

  4. 【Error】SSL InsecurePlatform error when using Requests package

    使用requests时会出席SSL InsecurePlatform error when using Requests package的错误,一般情况下python2.7.10以下的环境会出现此错误 ...

  5. restframework api(基础1)

    最近项目忙成狗,都没时间好好看看开发的东西了,正好最近开始看rest api的东西,真是个好东西啊.可以前后端分离,但是在学习的过程中,遇到各种问题.还是基础不够扎实.本次rest api的会一边遇坑 ...

  6. zen cart 空白页面的解决方案

    在安装zen cart 这套CMS时, 有时候会由于修改了某些页面或者是由于环境的某些组件的版本问题导致前台页面出现空白页, 由于在空白页面处没有任何提示, 并且在日志中也没有这样的出错提示, 导致在 ...

  7. MySQL索引优化详解

    MySQL存储引擎简介 查看命令 a. 查看所使用的MySQL现在已提供什么存储引擎: mysql> show engines; b. 查看所使用的MySQL当前默认的存储引擎: mysql&g ...

  8. 【hive】多表插入

    from or_table insert overwrite table1 name1 select … insert into table2 name2 select … 注意:select 后边不 ...

  9. linux 常用一些指令

    1.后台执行 nohup /bin/bash import.sh 1>&2 2>log & 2.生成脚本 for i in `ls` ; do echo "mys ...

  10. WeChat-JSAPI支付

    官方API:打开连接 特别注意----JSAPI只能在微信环境下 测试!2017-04-19 配置:微信公众号中 添加微信支付配置--请认真填写配置并获取下面对应的数据才能正常运行. ======== ...