学习Json记录
来源:互联网 发布:cocos2d-js教程 编辑:程序博客网 时间:2024/06/05 11:54
第一次写csdn,记录一下。
学习EasyDevice时,了解到EasyDevice使用HTTP协议承载Json数据在设备与服务器之间、及服务器与客户端之间进行数据交互,同时也看到许多网络协议也是基于Json格式的,逐认识到Json应用的广泛性,看来得认识下Json了。
来看下较W3C的教程
JSON:JavaScript 对象表示法(JavaScript Object Notation)。
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
JSON 语法是 JavaScript 语法的子集。
JSON 语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName" : "John"
这很容易理解,等价于这条 JavaScript 语句:
firstName = "John"
JSON 值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
JSON 对象
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
这一点也容易理解,与这条 JavaScript 语句等价:
firstName = "John"lastName = "Doe"
JSON 数组
JSON 数组在方括号中书写:
数组可包含多个对象:
{"employees": [{ "firstName":"John" , "lastName":"Doe" },{ "firstName":"Anna" , "lastName":"Smith" },{ "firstName":"Peter" , "lastName":"Jones" }]}
在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
自己试着写一个Json文件!
================================== example1_dvr.json =================================={"System" : {"Hardware" : "DVR_HW_v1.0","Software" : "DVR_SW_v1.0","CameraNum" : 4,"HasPtz" : true,"HasEthernet" : true,"HasWiFi" : false,"HasGPS" : true},"Config" : {"Camera" : [{"Video" : {"EncType" : "H264","EncSize" : "1280x960","EncFrameRate" : 29.5,"EncMode" : "CBR","EncBitRate" : 2048},"Audio" : {"EncType" : "G711A"}},{"Video" : {"EncType" : "H264","EncSize" : "1280x960","EncFrameRate" : 29.5,"EncMode" : "CBR","EncBitRate" : 2048},"Audio" : {"EncType" : "G711A"}},{"Video" : {"EncType" : "H264","EncSize" : "1280x960","EncFrameRate" : 29.5,"EncMode" : "CBR","EncBitRate" : 2048},"Audio" : {"EncType" : "G711A"}},{"Video" : {"EncType" : "H264","EncSize" : "1280x960","EncFrameRate" : 29.5,"EncMode" : "CBR","EncBitRate" : 2048},"Audio" : {"EncType" : "G711A"}}],"PTZ" : {"Serial" : "/dev/ttyAMA2","Baudrate" : 9600,"Protocol" : "PolcoD","CameraAddr" : [1, 2, 3, 4]},"GPS" : {"Serial" : "/dev/ttyAMA1","Baudrate" : 9600,"Protocal" : "Blox"}},"Log" : [{"Time" : "09:26:23", "Tag" : "UserLogin", "Description" : "ip:183.39.231.137"},{"Time" : "09:37:30", "Tag" : "UserLogout", "Description" : "ip:183.39.231.137"},{"Time" : "09:51:36", "Tag" : "UserLogin", "Description" : "ip:121.196.220.153"},{"Time" : "09:52:32", "Tag" : "UserLogout", "Description" : "ip:121.196.220.153"},{"Time" : "11:56:18", "Tag" : "UserLogin", "Description" : "ip:121.196.220.153"},{"Time" : "11:56:53", "Tag" : "UserLogout", "Description" : "ip:121.196.220.153"},{"Time" : "19:26:23", "Tag" : "UserLogin", "Description" : "ip:183.39.231.137"},{"Time" : "19:37:30", "Tag" : "UserLogout", "Description" : "ip:183.39.231.137"},{"Time" : "19:51:36", "Tag" : "UserLogin", "Description" : "ip:121.196.220.153"},{"Time" : "21:56:53", "Tag" : "UserLogout", "Description" : "ip:121.196.220.153"}]}================================== end ==================================
在网上找个在线Json解析网站,将上述Json贴上去,验证通过^_^!!!
使用cJson库解析再打印下
================================== example1_dvr.c ==================================#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <cJSON.h>int main(int argc, char *argv[]){FILE *fp = fopen(argv[1], "r");char *pJsonFileBuf = NULL;int iJsonFileLen = 0;cJSON *pJsonObj = NULL;char *pJsonPrintBuf = NULL;if (!fp) {fprintf(stderr, "fopen fail: %s\n", strerror(errno));return -1;}fseek(fp, 0L, SEEK_END);iJsonFileLen = ftell(fp);fseek(fp, 0L, SEEK_SET);pJsonFileBuf = (char*) calloc(1, iJsonFileLen + 1);if (!pJsonFileBuf) {fprintf(stderr, "Calloc for JsonFileBuf fail: %s\n", strerror(errno));return -1;}fread(pJsonFileBuf, iJsonFileLen, 1, fp);pJsonObj = cJSON_Parse(pJsonFileBuf);if (!pJsonObj) {fprintf(stderr, "cJSON_Parse fail: %s\n", cJSON_GetErrorPtr());return -1;}pJsonPrintBuf = cJSON_Print(pJsonObj);if (!pJsonPrintBuf) {fprintf(stderr, "cJSON_Print fail: %s\n", cJSON_GetErrorPtr());return -1;}fprintf(stderr, "JSON format is right !!!\n");printf("%s", pJsonPrintBuf);fflush(stdout);fprintf(stderr, "\n");free(pJsonPrintBuf);cJSON_Delete(pJsonObj);free(pJsonFileBuf);fclose(fp);return -1;}================================== end ==================================
再来个运行截图
解析正确,cJson打印格式跟手写不一样哦。先学到这吧,用到再继续熟悉,哈哈
阅读全文
0 0
- JSON学习记录
- 学习Json记录
- 12、JSON 学习记录
- Java解析json学习记录
- FastXML Jackson / JSON 学习记录
- Android 学习记录-Json数据处理
- JSON工具学习记录--FastJSON
- java_web 学习记录(四):json
- JSON 记录
- json记录
- [学习记录]js处理json的list对象
- JSON工具学习记录--FastJSON循环引用问题
- JSON工具学习记录FastJSON循环引用问题
- Spring Security学习记录(三) -- JSON Web Token实践(上)
- Spring Security学习记录(四) -- JSON Web Token实践(下)
- Newtonsoft.Json 修改记录
- json 小小记录
- json解析记录
- pip --upgrade批量更新过期的python库
- HDU 2017多校联赛-Regular polygon
- 莫比乌斯反演
- 高通平台串口配置
- 【caffe学习笔记——cifar10】win10+caffe环境下cifar10运行
- 学习Json记录
- 通过Object.prototype扩充功能,增加对所有对象都可用的方法
- Python不用推荐用分号,而是用回车
- 如何把技术讲得更容易听懂?
- 编译vs2008的程序总是跳过,显示“未能完成操作 未指定的错误”的解决办法 .
- Velocity 模板
- 第一次使用Android Studio时你应该知道的一切配置
- 我的第一篇博客
- 【C++练习】文件合并程序