json简单说就是javascript中的对象和数组。

  1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

  2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...]或[{key:"value"},{key:"value"}],取值方式和所有语 言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

现在细说两个结构的使用。

对象结构:

{
  no1:{
    stuNo: 'no1' ,
    stuName: '张三'
  }
}

以上是一个完整的json对象建构。no1表示一个学生对象,它可以实现存在文本中或者由Serlvet输出而成,代码模式为:

StringBuffer sb =  new  StringBuffer();
sb.append( "{" );
        sb.append( "student:{" );
        sb.append( "    stuNo:'10000'," );
        sb.append( "    stuName:'张三'," );
        sb.append( "  }" );
sb.append( "}" );
out.print(sb.toString());

通过jQuery很容易就可以通过Serlvet获取到这条数据。

$.getJSON(url,  function (data) { //url是输出json数据的页面地址,data便是从servlet输出的json数据,

        for  ( var  stuNo in  data) {//对象是键值对的结构,和Map类似,通过键能获取相应的值。
             var  stu = data[stuNo];//这里获取的便是no1的对象
             var stuNo = stu.stuNo; //对象的属性可以直接用对象.属性的方式得到属性值
             var  stuName=stu.stuName;
            //至此,我们便能获取一条完整的student信息了。
          }        },  "json" );

一个简单的JSON对象结构为:{stuNo:'100',stuName:'张三'}。同样是通过data.stuNo,data.stuName的方式获取里面的值。

对象的具体形式:
   1、对象是一个“名称/值”集合,如 no1:{stuNo:'no1',stuName:'张三'} 这个对象的键是no1,通过no1能获取所有信息,再通过no1.stuNo的键能获取stuNo的值。
   2、对象以{ 开始,以 }结束。每个名称后面跟一个冒号:,如no1、stuNo后面都是以冒号结尾。
   3、每个“键/值”间都用逗号,分开。如:stuNo:'no1',stuName:'张三' 。
    
 
 
数组结构:
[
    {"stuNo":"100","stuName":"张三"}
]
这个简单的数组结构可就无法通过键来取值,得使用数组的索引方式取值。如:var student1=data[0];
这样便获取了第一条学生信息,想要进一步取得stuNo和stuName的值,就可以直接用键来取了。之所以数组结构里的具体取值跟对象结构取值一样,看看每条信息的格式就明白了,以{ 开始,以 }结束,这不就是一个对象么。所以说来,数组结构里可以包含对象结构。
JSON数组的具体形式:
  1、数组以“[”开始,以“]”结束,值之间用逗号,分开。
    
对象&数组
{
"学生" :
[
{ "姓名" : "小明" , "年龄" : 23 },
{ "姓名" : "大憨" , "年龄" : 24 }
]
}

  此Json对象包括了一个学生数组,而学生数组中的值又是两个Json对象。

对象结构里可以包含数组结构,同样数组结构里也能包含数组。这就好比对象里可以有数组类型的属性,而数组也有对象数组之分。
对象结构的遍历得通过键来循环,而数组结构通过索引遍历。
 
JSON数据内,不同的主条目之间,记录的实际名称/值可以不一样

{
  no1 : {
    stuNo : 'no1' ,
    stuName : '张三'
  },
  no2 : {
    stuNo : 'no2' ,
    stuName : '李四',
    sex:'男'
  }
}
这里no2对象中多了个sex的名称,这在JSON中也是允许的。JSON数据是完全动态的,允许在JSON结构的中间改变数据的方式。处理JSON格式的数据时,没有需要遵守的预定义的约束。
 
访问数据:
在Javascript中,JSON数据可以直接赋值给变量:
var student={ "学生" : [{ "姓名" : "小明" , "年龄" : 23 }]}

这里student实质已经成为了一个数组,再访问里面的数据只需通过点号表示法来获取。得到小明的Javascript代码:
var xiaoming=studetn.学生[0].姓名

 
通过“学生”得到一个数组,然后直接从索引0得到第一条记录,最后访问“姓名”键的值,结果是“小明”。
 
修改数据:
studetn.学生[ 0 ].姓名="小红"

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

修改数据的前提是对象得是文本格式,如果是直接从其他地方传进来的JSON数据,JavaScript会以对象来处理,无法通过数组的形式修改值。两种方式可以把JSON对象转换为JSON文本,一是eval(JSON),二是:JSON.toJSONString();
这样就可以获得一个能在任何地方使用的JSON文本字符串。
toJSONString()方法还能直接将其他对象转换为JSON文本,获得格式化的数据。
 
JSON数据有严格的格式,逗号,大括号,中括号必须补齐,不能多不能少。
推荐个网站检查自己的JSON数据格式:
 

JSON的使用_检查JSON工具的更多相关文章

  1. JSON生成c#类代码小工具

    JSON生成c#类代码小工具 为什么写这么个玩意 最近的项目中需要和一个服务端程序通讯,而通讯的协议是基于流行的json,由于是.net,所以很简单的从公司代码库里找到了Newtonsoft.dll( ...

  2. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  3. Golang Json文件解析为结构体工具-json2go

    代码地址如下:http://www.demodashi.com/demo/14946.html 概述 json2go是一个基于Golang开发的轻量json文件解析.转换命令行工具,目前支持转换输出到 ...

  4. PHP-PHP5.3及以上版本中检查json格式的方法

    function is_json($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); } j ...

  5. JSON在线解析及格式化校验工具 jsonin.com

    JSON在线解析及格式化校验工具 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.它是基 ...

  6. Json:Java对象和Json文本转换工具类

    Json 是一个用于 Java 对象 和 Json 文本 相互转换的工具类. 安装 下载源码 git clone https://github.com/njdi/durian.git 编译源码 cd ...

  7. json对象的操作,json工具

    项目中经常用到json,现在把写了几个js函数,用来获取json对象或者json字符串的长度,以及获取其的key值,value值,并且返回. 这样以后可以直接拿来用,可以省去不少麻烦,也方便以后查看. ...

  8. 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象

    使用 dynamic 标记解析JSON字符串  http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...

  9. json格式的字符串转为json对象遇到特殊字符问题解决

    中午做后台发过来的json的时候转为对象,可是有几条数据一直出不来,检查发现json里包含了换行符,造成这种情况的原因可能是编辑部门在编辑的时候打的回车造成的 假设有这样一段json格式的字符串 va ...

随机推荐

  1. POJ 3252 Round Numbers (区间DP,基础)

    题意: 统计区间[L,R]有多少个数,其二进制表示法中的0的个数不少于1的个数?(不允许前缀0) 思路: 状态表示为 [当前第几位][总位数][1的个数],最后判断一下1的个数是否满足条件,要注意前导 ...

  2. hdu 3466 Proud Merchants 自豪的商人(01背包,微变形)

    题意: 要买一些东西,每件东西有价格和价值,但是买得到的前提是身上的钱要比该东西价格多出一定的量,否则不卖.给出身上的钱和所有东西的3个属性,求最大总价值. 思路: 1)WA思路:与01背包差不多,d ...

  3. UVA 1619 Feel Good 感觉不错 (扫描法)

    Feel Good Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Bill is deve ...

  4. js实现23种设计模式(收藏)

    js实现23种设计模式 最近在学习面向对象的23种设计模式,使用java 和 javascript 实现了一遍,但是因为目前大三,还没有比较正规的大项目经验,所以学习的过程种我觉得如果没有一定的项目经 ...

  5. ios下通过webservice获取数据

    经历了两天的摸索,终于成功获取了数据,因为公司要做一个停车入库的信息查询,所以需要访问webservice的接口,由于没有接触过webservice,所以第一天就是各种搜索资料,类库,各种尝试,甚至是 ...

  6. C语言实现两数相加2018-09-23

    /*给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 ...

  7. STL 之 sort 函数使用方法

    关于Sort Sort函数是C++ STL(Standard Template Library / 标准函数库) <algorithm>头文件中的一个排序函数,作用是将一系列数进行排序,因 ...

  8. NOIP2018 - 暑期博客整理

    暑假写的一些博客复习一遍.顺便再写一遍或者以现在的角度补充一点东西. 盛暑七月 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士 比较经典的基环外向树dp.可以借鉴的 ...

  9. redis学习笔记(2)

    redis学习笔记第二部分 --配置文件介绍 二,解析redis的配置文件redis.conf常见配置参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通 ...

  10. LeetCode之Weekly Contest 90

    LeetCode第90场周赛记录 第一题:亲密字符串 问题: 给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true :否则返回  ...