json数组对象和对象数组(转)
转自:http://www.cnblogs.com/zhangji/archive/2011/09/02/2163811.html
一、Json的简单介绍
从结构上看,所有的数据最终都可以分成三种类型:
第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。
第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它的规则非常简单并且是有趣的:
1) 并列的数据之间用逗号(“,”)分隔。
2) 映射用冒号(“:”)表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号(“{}”)表示。
按照这个规则可以作以下理解:
1.数组用“[]”创建,对象用“{}”创建,并且使用Json基本都是用[]或者{}创建的数组或对象,否则一个普通的字符串是没有意义的;
2.无论是数组还是对象,之间的元素都用“,”隔开;
3.对象内部,(属性的)名称和值用“:”隔开,并且必须要用“:”隔开,不可单独存在属性名或者值;
4.对象和数组可以互相嵌套,即数组中的一个元素可以是一个对象也可以是一个数组,同理对象中的一个属性的值可以是一个对象也可以是一个数组。
二、事例
1.
var china= {beijing:{name:"北京",area:"16000",haidian:{name:"海淀区"}},
shanghai:{name:"上海",area:"10000",minhang:{name:"闵行区"}}};
alert(china.beijing.haidian.name);
alert(china.shanghai.minhang.name);
分别弹出“海淀区”和“闵行区”。
2.
var ourcountry=[["北京市"],["上海市"],["合肥市","芜湖市","蚌埠市"]];
alert(ourcountry[2][1]);
弹出“芜湖市”。
3.
var zhongguo={provinces:[{name:"北京",cities:[{name:"北京市",quxian:["海淀区","朝阳区","东城区","西城区"]}]},
{name:"安徽省",cities:[{name:"芜湖市",quxian:["繁昌县","芜湖县","南陵县","三山区"]},{name:"合肥市",quxian:["肥西县","蜀山区","庐阳区"]}]},
"湖北省"
]};
var str = "中国:{\n";
for(var i = 0; i < zhongguo.provinces.length; i++)
{
if(zhongguo.provinces.cities != null)
{
str += zhongguo.provinces.name + "{";
for(var j = 0; j < zhongguo.provinces.cities.length; j++)
{
if(zhongguo.provinces.cities[j] != null)
{
str += zhongguo.provinces.cities[j].name + "{";
for(var k = 0; k < zhongguo.provinces.cities[j].quxian.length; k++)
{
str += zhongguo.provinces.cities[j].quxian[k];
if(k != zhongguo.provinces.cities[j].quxian.length - 1)
{
str += ",";
}
}
str += "}";
}
}
str += "}\n";
}
}
str += "}";
alert(str);
弹出“
中国:{
北京{北京市{海淀区,朝阳区,东城区,西城区}}
安徽省{芜湖市{繁昌县,芜湖县,南陵县,三山区}合肥市{肥西县,蜀山区,庐阳区}}
}
”。
三、Json在Ajax中的应用
客户端可以给服务器端通过地址栏或者post很容易的提交数据,但是服务器端处理完数据之后,将计算的结果信息回传给客户端时就存在了一定的难度,特别是 数据量较大时。这个时候数据的格式成了关键,按照某种格式可以很方便的进行数据的组装,然后可以很方便的进行解析。使用Json便是一种很好的策略。在服 务器端,按照Json的格式拼装好一个字符串,响应给客户端。客户端如何进行解析呢?一般有两种策略(两种策略的名称是自己给的名字,不一定很合理,但是 思路应该是没有问题的):
1.直接解析
var json = eval('(' + result + ')');
通过上面这个表达式,就完成了将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,名称为“json”,通过“json.”或者“json[]”的方式便可进行数据访问。
2.间接解析
var json = "r=" + result;
eval(json);
当然上面行代码可以合并为:eval("r=" + result);
通过上面的计算,也可以将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,但是该对象名称为“r”,通过“r.”或者“r[]”的方式可进行数据访问。
总结:Json是一种简单的数据交换格式,它几乎可以很好的代替xml让服务器之间灵活的交换数据。
四、JavaScript中的数组和对象
在JavaScript中,通常用[]创建的数据格式称为数组,用{}创建的东西称为对象。
有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么到底该用哪一种呢?
其实数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。
当然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。但是问题是,很多编程语言中,都有一种叫 做“关联数组”(associativearray)的东西。这种数组中的数据是有名称的。比如在javascript中,可以这样定义一个对象:
var a={"城市":"北京","面积":16800,有趣,"人口":1600};
但是,也可以定义成一个关联数组:
var a = new Array();
a["城市"]="北京";
a["面积"]=16800;
a["人口"]=1600;
这样一来好像数组和集合就没有区别了,其实不是,在Javascript语言中,关联数组就是对象,对象就是关联数组。通过第二种方式创建的数组和通过 []方式创建的数组是有很大的区别的,在第二个方式创建的“数组”中,也可以和第一种方式类似,通过“a.城市”来得到“北京”,“a.人口”来得到 “1600”,但是它和第一种方式创建的对象又是有区别的,通过第一种方式定义的a是没有length属性的,二通过第二种方式定义的a有,可是值为0, 可见里面的差别还是有的,要想具体搞清楚,恐怕得看看底层的一些实现代码了。
当 eval 返回的 json 值时,提示 Error: Invalid Label 摘要: 我们经常会在服务器端返回 json 格式的值,这样可以直接在脚本中当作完整的对象来使用,但是,许多新手通常都会遇到一个错误提示:Invalid Label ,这个问题通常会让人苦恼不堪,因为明明正确的 json 格式,却提示错误。如果你遇到此问题,那赶快看看本文的内容吧!
我们经常会在服务器端返回 json 格式的值,这样可以直接在脚本中当作完整的对象来使用,但是,许多新手通常都会遇到一个错误提示: Invalid Label ,这个问题通常会让人苦恼不堪,因为明明正确的 json 格式,却提示错误。
假如你从服务器端返回的是 json 格式的字符串:
>
当你在脚本中用 eval 的方式运行:
>
这时会提示 : Error: Invalid Label
实际上,我们的 json 格式并没有错误,只是在 eval 的时候,要把你的 json 值用 “()” 括号括起来:
> var result = eval("(" + o.responseText + ")"); help001
json数组对象和对象数组(转)的更多相关文章
- JSON 格式的转换: 数组、字符串、List集合、DataTable,实体对象
JSON验证工具:http://jsonlint.com/JSON简明教程:http://www.w3school.com.cn/json/Newtonsoft.Json类库下载:http://jso ...
- 转 json数组对象和对象数组
一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第 ...
- 用JAVA进行Json数据解析(对象数组的相互嵌套)
这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下! 假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相 ...
- JSON语法、对象、遍历数组的区别和基本操作
JSON 语法规则 JSON 语法是 javascript 对象表示语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是: ...
- JS中彻底删除json对象组成的数组中的元素
只是分享一个小知识~ 在JS中,对于某个由json对象组成的数组,例如: var test = [{ "a": "1", "b": &quo ...
- Json数组对象和对象数组
Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第二种 ...
- json数组对象和对象数组 ---OK
一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第 ...
- C# json反序列化 对象中嵌套数组 (转载) 可能会导致循环或多重级联路径。请指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
C# json反序列化 对象中嵌套数组 (转载) 看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的 Newtonso ...
- Java基础/利用fastjson反序列化json为对象和对象数组
利用fastjson反序列化json为对象和对象数组 利用 fastjosn 将 .json文件 反序列化为 java.class 和 java.util.List fastjson 是一个性能很好的 ...
随机推荐
- 数据结构典型算法的VC实现(袁辉勇)
1. 迷宫问题求解 #include <stdio.h> #define m 8 //迷宫内有8列 #define n 8 //迷宫内有8行 #define MAXSIZE 100//栈尺 ...
- 《University Calculus》-chaper13-向量场中的积分-线积分
线积分: 基于二重积分和三重积分的引入,我们对于线积分的引入过程将会轻车熟路. 对于一根不均匀密度的铜丝,我们如何求其总质量?如下图. 类似二重积分和三重积分的引入,我们首先基于实际问题给出黎曼和的形 ...
- [转载]Linux服务器性能评估与优化
转载自:Linux服务器性能评估与优化 一.影响Linux服务器性能的因素 1. 操作系统级 CPU 内存 磁盘I/O带宽 网络I/O带宽 2. 程序应用级 二.系统性能评估标准 影响性 ...
- [转载]Web前端和后端之区分,以及面临的挑战
原文地址:Web前端和后端之区分,以及面临的挑战[转]作者:joyostyle 在我们实际的开发过程中,我们当前这样定位前端.后端开发人员. 1)前端开发人员:精通JS,能熟练应用JQuery,懂CS ...
- python数据的存储和持久化操作
Python的数据持久化操作主要是六类:普通文件.DBM文件.Pickled对象存储.shelve对象存储.对象数据库存储.关系数据库存储. 普通文件不解释了,DBM就是把字符串的键值对存储在文件里: ...
- Bloom Filter 原理与应用
介绍 Bloom Filter是一种简单的节省空间的随机化的数据结构,支持用户查询的集合.一般我们使用STL的std::set, stdext::hash_set,std::set是用红黑树实现的,s ...
- JQuery的Ajax跨域请求的
JQuery的Ajax跨域请求的(Ajax) 什么是jsonp格式呢?API原文:假设获取的数据文件存放在远程server上(域名不同.也就是跨域获取数据),则须要使用jsonp类型.使用这样的类型的 ...
- Java基础知识强化之IO流笔记20:FileOutputStream写出数据实现换行和追加写入
1. 如何实现数据的换行? (1) package com.himi.fileoutputstream; import java.io.FileNotFoundException; import j ...
- Java基础知识强化之IO流笔记14:递归之输出指定目录下所有java文件绝对路径的案例
1. 需求:输出指定目录下的所以.java结尾文件的绝对路径的案例: 分析: A:封装目录 B:获取该目录下的所有文件和文件夹的File数组 C:遍历这个File数组,得到每一个File对象的 ...
- 织梦DedeCMS广告管理模块增加图片上传功能插件
网站广告后台管理非常方便,但是织梦后台的广告管理模块,发布广告时图片没有上传选项,只能用URL地址,很不方便,那么下面就教大家一个方法实现广告图片后台直接上传,非常方便. 先给大家看下修改后的广告图片 ...