zoukankan      html  css  js  c++  java
  • Json数据结构认识

    JSON是一种轻量级的,基于文本的数据交换格式,仅仅靠特定的字符格式就能很方便的传递字符信息,以下对JSON详细解读。

    JSON:

    全称:“JavaScript Object Notation”,(JavaScript 对象表示法),一种基于文本,独立于语言的轻量级数据交换格式,在我看来JSON的特性就是简洁,用处广泛,在我接触到的各个语言都有使用,可以跨平台使用,不存在通常意义上的字符格式问题。XML也是一种数据交换格式,不过XML标记比较多,往往使得标记比需要传递的数据都还多,这样会增加字符传输的负担。因此,若是能使用JSON的时候,我们更倾向于使用JSON。下面简单的说明下JSON

    JSON规定的格式:
    1)数据在键值对中
    2) 数据由逗号分隔
    3) 花括号保存对象
    4) 方括号保存数组


    JSON的两种结构:

    JSON可以有两种表示结构:对象和数组
    对象结构以"{"大括号开始,以"}"大括号结束。中间部分由以","来分割开键值对(key/value)代码表示如下:
    [html] view plain copy
     
    1. {  
    2.      key1:value1,     
    3.      key2:value2,   
    4.          ...  
    5. }  
    
    
    其中:关键字需要是字符串,而值可以是其他任何数据,比如:字符串,数值,布尔值,对象或者是null。
     
    数组结构以"["方括号开始,"]"方括号结束。中中间部分由以","来分割对象。代码表示如下:
    [html] view plain copy
     
    1. [     
    2.    {    
    3.      key1:value1,    
    4.      key2:value2    
    5.   },   
    6.   {   key3:value3,  
    7.        key4:value4     
    8.   }  
    9. ]  


    这样说比较空泛,用编程语言类比:两种结构的具体区别在于取值方式不同。对象是用{}包括起来的数据,比如{"key":"1024","key2":"2048"}.这样可以理解为string key="1024",string key2="2048"。需要取值的时候,就按照对应的键取对应的值。而对于数组结构,可以理解为["value","key","test"],这种结构,取值和数组一样,按索引
    取值。总的来说,混合应用时,对象保存一个对象的信息,数组保存多个对象。


    Json实际使用:


    一般来说,实际使用的Json是数组加对象组成的数据结构。
    下面由简单到复杂的json举例:
    对于最简单的JSON。可以使用下面的数据结构:
    [html] view plain copy
     
    1. {"firstKey":"Citron"}  
    如以上我说的,这个例子相当于:firstKey=Citron;
    [html] view plain copy
     
    1. {  
    2.    "firstkey":"Citron",  
    3.    "address":"BeiJing",  
    4.    "phoneNum":"111"  
    5.   
    6. }  
    只是添加了花括号,添加了特定的格式,便变成了Json,这样的数据结构,具有更加容易读取,格式更加统一,如以上列子中,一眼便能看出来这是关于一个人的信息。
    但是如果需要传递的一串数据是很多个人的信息呢?这就是数组和对象混合使用方式:
    [html] view plain copy
     
    1. {  
    2.     "people":[  
    3.         {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},  
    4.         {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},  
    5.         {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}  
    6.     ]  
    7. }  
    对以上示例的解析:在一个名为people的数组中,保存着3组数据,每组数据包含一个人的姓,名,email。
    问题又来了,people这个词太宽泛,如果我还想对它分类,按职业分类,再传递怎么办。
    解决方法:传递一个对象,这个对象包含多个职业的数组,每个职业数组里面包含不同的人对象,每个人对象里面包含这个人的信息。

    [html] view plain copy
     
    1. {  
    2.     "programmers": [{  
    3.         "firstName": "Brett",  
    4.         "lastName": "McLaughlin",  
    5.         "email": "aaaa"  
    6.     }, {  
    7.         "firstName": "Jason",  
    8.         "lastName": "Hunter",  
    9.         "email": "bbbb"  
    10.     }, {  
    11.         "firstName": "Elliotte",  
    12.         "lastName": "Harold",  
    13.         "email": "cccc"  
    14.     }],  
    15.     "authors": [{  
    16.         "firstName": "Isaac",  
    17.         "lastName": "Asimov",  
    18.         "genre": "sciencefiction"  
    19.     }, {  
    20.         "firstName": "Tad",  
    21.         "lastName": "Williams",  
    22.         "genre": "fantasy"  
    23.     }, {  
    24.         "firstName": "Frank",  
    25.         "lastName": "Peretti",  
    26.         "genre": "christianfiction"  
    27.     }],  
    28.     "musicians": [{  
    29.         "firstName": "Eric",  
    30.         "lastName": "Clapton",  
    31.         "instrument": "guitar"  
    32.     }, {  
    33.         "firstName": "Sergei",  
    34.         "lastName": "Rachmaninoff",  
    35.         "instrument": "piano"  
    36.     }]  
    37. }  
  • 相关阅读:
    host配置
    查看浏览器内核以及版本信息
    优化你的数据库索引
    密集索引和稀疏索引的区别
    Interview
    hadoop启动后,jps命令后发现nodename启动失败,检查日志报错:FSNamesystem initialization failed
    hadoop学习之hadoop完全分布式集群安装
    VMWare虚拟机下为Ubuntu 配置静态IP(NAT方式)ping通主机
    虚拟机突然无法使用NAT模式上网
    hadoop-0.20.2 & hbase-0.90.1 集群启动错误“org.apache.hadoop.ipc.RPC$VersionMismatch: Protocol org.apache.hadoop.hdfs.protocol.ClientP
  • 原文地址:https://www.cnblogs.com/arvins/p/8504502.html
Copyright © 2011-2022 走看看