JSON基本用法

  2016-08-10 16:42:19
 
JSON的全称是“JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。类似Java中的List,Map等。 XML也是一种数据交换格式,但为什么没有选择XML呢? 因为XML虽然可以作为跨平台的数据交换格式,但是在JS中处理XML非常不方便,同时XML标记比数据还多,增加了交换数据产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。
如下,清晰的看到JSON内部和XML内部
JSON:
 {
key1:value1,
key2:value2,
……
}

XML:

 <CATALOG>
<PLANT>
<COMMON>Bloodroot</COMMON>
<ZONE>4</ZONE>
……
<PLANT>
……
<CATALOG>

JSON的两种基础结构

对象和数组 是JSON的两种基础结构
  • 对象机构以“{”开始,以“}”结束。中间部分由0或者n个以”,“分隔的‘键值对’ key(关键字):value(值)构成。语法结构如下:
     { key1:value1, key2:value2, …… }     
   其中关键字是字符串,值可以是字符串、数值、true、false、null、对象和数组
  • 数据结构以“[”开始,“]”结束。中间由0或n个以“,”分隔的值列表组成,语法结构如下
     [ { key1:value1, key2:value2 }, { key3:value3, key4:value4 } ] 

认识JSON字符串,字符串,JSON对象

JSON字符串:顾名思义json形式的字符串,既符合json格式要求的js字符串。如:var jsonStr = "{id:-123,name:'drubber'}";
JSON对象:指符合json格式要求的js对象。如:var jsonObj = {id:'123',name:'drubber'};

JSON字符串和JSON对象的转换

JSON字符串转化为JSON对象
   //JSON字符串转化为JSON对象
var jsonStr = '{"name":"drubber.com", "password":"222"}';
var jsonObj = eval('('+jsonStr+')');

JSON对象转化为JSON字符串

   //JSON字符串转化为JSON对象
var jsonStr = '{"name":"drubber.com", "password":"222"}';
var jsonObj = eval('('+jsonStr+')');
var jsonStr2 = JSON.stringify(jsonObj);

在JS中如何使用JSON

JSON是JS的一个子集,所以可以在JS中轻松的读写JSON。读和写JSON都有两种方法,分别是“.”和“[key]”的方式。
我们首先定义一个JSON对象,代码如下:
 var obj = {
1:"value1",
"2":"value2",
sum:3,
people:[
{
"name":"zhangsan",
"sex":"gril"
},
{
"name":"lisi",
"sex":"boy"
}
],
objJson:{
id:1,
name:"json"
}
};

从JSON中读数据

     //alert(obj.1+"***"+obj[1]);
//alert(obj.2);//同上,会报错,说明最好不用数字做关键字
alert(obj["2"]);
alert(obj.sum); alert(obj.people[0].name +"***"+obj["people"][0]["name"]);

往JSON中写数据和修改数据(两者是一样的)

   //JSON写入数据
obj.test = "test";
删除JSON中的数据
 //删除JSON数据
delete obj.test;

遍历JSON对象

 //遍历JSON对象
for(var i in obj){
console.log(i + ":",obj[i]);
}

JSON数组的操作

1、JSON数组中添加JSON对象

 objArray.push(obj.objJson);  
2、JSON数组删除数据,修改和添加
   (1)删除第一个对象
   objArray.shift();   
   (2)删除最后一个对象

objArray.pop();

   (3) .splice(start, deletecount, items1,items2……) 从start位置开始的deletecount个对象替换为items1,items2……;
     数组的下标从0开始;  此方法可以删除,添加,修改对象。
3、JSON数组的遍历
   (1)原生js遍历JSON数组
    //遍历JSON数组
var peopleArray = obj.people;
for(var i=0;i<peopleArray.length;i++){
debugger
console.log(i + ":",peopleArray[i]);
}

 (2)Jquery方法each遍历JSON数组

    var peopleArray = obj.people;
$.each(peopleArray,function(i,value){
console.log(i + ":",value);
});

在java语言中使用JSON

web页面提交json到后台

为避免乱码需要做如下处理

url:"/regist.htm?registInfo="+encodeURI(encodeURI(JSON.stringify(jsonObject))),

相应的java代码为

String paString = URLDecoder.decode(request.getParameter("parm"), "utf-8")

  

转载自:http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html

JSON基本用法的更多相关文章

  1. 再谈Newtonsoft.Json高级用法

    上一篇Newtonsoft.Json高级用法发布以后收到挺多回复的,本篇将分享几点挺有用的知识点和最近项目中用到的一个新点进行说明,做为对上篇文章的补充. 阅读目录 动态改变属性序列化名称 枚举值序列 ...

  2. Jquery之JSON的用法

    今天讲了Jquery里面JSON的用法,下面是今天讲课给的例子: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" &quo ...

  3. Newtonsoft.Json高级用法之枚举中文转义

    最近看博客园中 焰尾迭的两篇关于"Newtonsoft.Json高级用法"的文章受到了很多人的评论,一度登入到头条推荐. 今天我就不再重复焰尾迭博文中的一些提过的Newtonsof ...

  4. Newtonsoft.Json高级用法(转)

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  5. 【转】 Newtonsoft.Json高级用法

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  6. Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称

    手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...

  7. Newtonsoft.Json 高级用法

    基本用法 Json.NET是支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity的.下面分别举例说明序列化和反序列化. DataTable: //序列 ...

  8. 转:Newtonsoft.Json高级用法

    原文地址:http://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多 ...

  9. Json.Net用法

    基本用法 Json.Net是支持序列化和反序列化DataTable,DataSet,Entity Framework和Entity的.下面分别举例说明序列化和反序列化. DataTable: //序列 ...

随机推荐

  1. morhia解决BigDecimal映射问题

    错误信息:morphia No usable constructor for java.math.BigDecimal 解决办法:增加自定义类型转换器,代码如下 package cn.huilink. ...

  2. 如何做好APP测试?

    测试一个App具体包括哪些方面,以及每个方面有什么关键点呢? 测试人员常被看作bug寻找者,但你曾想过他们实际是如何开展测试的吗? 你是否好奇他们究竟都做些什么,以及他们如何在一个典型的技术项目中体现 ...

  3. SQLServer2012中用于记录数据操作时刻的附加字段使用datetime2(3)就可以了

    datetime2(3)精确到毫秒(听说),约等于2005时代的datetime类型.实际上后者是精确到3.33毫秒(也是听说). ) = GETDATE(); ) = GETDATE(); ) = ...

  4. 使用集成的ADT bundle来搭建android开发环境

    android开发环境的搭建 本文使用集成的ADT bundle来搭建android开发环境,所谓bundle就是谷歌搭建好的一个eclipse+sdk集成环境.需要下载的软件列表如下: 1.ADT ...

  5. 再次理解javascript中的事件

    一.事件流的概念 + 事件流描述的是从页面中接收事件的顺序. 二.事件捕获和事件冒泡 +    事件冒泡接收事件的顺序:

  6. <<有效软件测试>> 读书笔记和自己的一些思考

    需求阶段 1. 测试人员及早介入,需要彻底了解产品,设计测试过程 * 及早介入,可以了解在开发的过程中需要使用哪些新技术,新的平台, 测试组是否方便进行测试,是否方便进行自动化测试,早期开发和测试应该 ...

  7. 万恶的ViewBag

    作个记录,鼓捣了一晚上,他竟然把订单事情给我篡改了 ViewBag.orderNo="20150613202108844"; 页面上出来的竟然是20150613202108840 ...

  8. [MySQL] SQL_ERROR 1032解决办法

    一.缘由: 在主主同步的测试环境,由于业务侧没有遵循同一时间只写一个点的原则,造成A库上删除了一条数据,B库上在同时更新这条数据. 由于异步和网络延时,B的更新event先到达A端执行,造成A端找不到 ...

  9. [家里蹲大学数学杂志]第235期$L^p$ 调和函数恒为零

    设 $u$ 是 $\bbR^n$ 上的调和函数, 且 $$\bex \sen{u}_{L^p}=\sex{\int_{\bbR^n}|u(y)|^p\rd y}^{1/p}<\infty. \e ...

  10. 20. Candy && Gas Station

    Candy There are N children standing in a line. Each child is assigned a rating value. You are giving ...