json

json 格式及使用

为什么需要 json

讨论如下引用场景,家中的智能设备将状态上报给微信上的 webapp 显示。 设备端利用 socket 进行状态的上报,服务端采用
a 是一个智能设备它会将每小时温度的数据存储为如下结构体。由于设备使用的是 C 语言数据结构如下:

   typeof struct deviceTmp{  
       int  tmpTime[],   //温度的变化的时间戳
       int  tmpData[]    //对应各时间戳的温度
   } 

假设传输方式为字符串模式,利用 socket 将消息发给了 node 的服务端处理,由于 node 采用的是 js 它需要把上述消息转变为如下格式。

   deviceTemp = {
    tmpTime:[],
    tmpData:[]
   } 

如果 node 服务器还需要使用 http 将消息发给 php 服务器保存历史数据。则 php 服务器希望数据格式如下:

      deviceTemp = aray(
        "tmpTime" => array(),
        "tmpData" => array()
        
      )

我们来看一下整个消息的处理过程

设备 --编码结构体为字符串--> node服务器 --
--> node 解码字符串 --编码字符串传给 php --> php 解码字符串处理

数据本身为两个数组,由于设备,node 服务器,php 服务器采用不同的语言,所以在语法表征 相同数据结构时会存在差异。如何保证字符串在传送的过程中无需自定义加解码格式。

json 是什么

理解了上面的问题可以看出 json 是一种编码方式,规定了如何利用文本来表征不同的数据结构。 所以我们所说的 json 对象更具体来说是如何使用文本模式来表征对象(它只能表征数据对象属性并不能表征方法)。

json 的灵感来自 js 的对象字面量语法。采用键值对的方式来表示数据结构。 支持的基本数据类型包括数值、字符串、数组,键值对结构

   //只支持 10 进制
   jsonNumber = "12" 
   JSON.parse(jsonNumber); // return  12
   
   //支持 unicode 字符集和转义字符字符串内容用双引号
   jsonStr = '"dfdf\n\u4e00"' 
   JSON.parse(jsonStr); // {‘dfdf
                        //   一'}"
   //支持多维数组                
   jsonArr = "[1,2,3]" 
   JSON.parse(jsonArr); // [1,2,3]     
   
   //键名必须为字符串用双引号
   //{} 中定义键值对,内部支持基本类型和嵌套结构
   jsonKeyValue = '{"key":12}';
   JSON.parse(jsonKeyValue); // [1,2,3]       
   
   //注意简直对字符串中的两次转义
   jsonKeyValue = '{"key":"\\nvalue\\u4e00"}'; 
   JSON.parse(jsonKeyValue); // [1,2,3]                                      
编码