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]