JSON数据构造及解析详解
1)可读性:Json和XML相比可谓不相上下,一边是简单的语法,一边是规范的标签形式,很难分出胜负。
2)可扩展性:XML天生有很好的可扩展性,Json也有。
3)编码难度:XML有丰富的编码工具,Json也有提供,但是XML要输入很多结构字符。
4)解码难度:凡是可扩展的数据结构,解析起来都很困难。
5)数据量: Json具有轻小的特点,降低了数据传输量。
3、JSON适用场景
同样的,为了支持跨平台、数据安全等的web service也是一种数据传输,自然也可以使用。
//1. json格式化数据,输出到控制台和文件
void JsonInsert()
{//根节点Json::Value root;Json::FastWriter fastWriter; //可以把Json::Value对象写入到字符串流或者文件中。Json::StyledWriter styleWriter;//根节点属性root["uploadid"] = Json::Value("UP0000011");root["code"] = Json::Value(58);root["msg"] = Json::Value("This is test msg!");Json::Value files;files["code"] = "00"; files["msg"] = "first00_msg";files["filename"] = "1D_16-35_1.jpg";files["filesize"] = "196690";files["width"] = "1024";files["height"] = "682";Json::Value images;for (int i = 0; i < 3; ++i){images[i]["url"] = "fmn061/20150704";images[i]["type"] = "large";images[i]["width"] = 720 + i;images[i]["height"] = 490 + i;files["image"].append(images[i]); //插入数组}//子节点挂载到根节点上root["files"] = Json::Value(files);//**直接输出cout << "FastWriter:" << endl;std::string json_file = fastWriter.write(root);cout << json_file << endl << endl;//**缩进输出cout << "StyledWriter:" << endl;std::string style_json_file = styleWriter.write(root);cout << style_json_file << endl << endl;//输出到文件ofstream ofs(INSERT_FILE_NAME);if (ofs.is_open()){ofs << style_json_file; //将缩进格式输出到文件.}ofs.close();cout << "insert " << INSERT_FILE_NAME << " successful!" << endl;
}
//0.解析串
int ParseJsonFromString()
{const char* str = "{\"uploadid\": \"UP000000\",\"code\": 100,\"msg\": \"\",\"files\": \"\"}";Json::Reader reader;Json::Value root;if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素{std::string upload_id = root["uploadid"].asString(); // 访问节点,upload_id = "UP000000"int code = root["code"].asInt(); // 访问节点,code = 100cout << "upload_id = " << upload_id << "\t code =" << code << endl;}return 0;
}
//2.解析1插入的文件
int ParseJsonFromFile(const char* pszFileName)
{// 解析json用Json::ReaderJson::Reader reader;// Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array...Json::Value root; std::ifstream is;is.open (pszFileName, std::ios::binary ); if (reader.parse(is, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素{std::string strUpload_id = root["uploadid"].asString(); // 访问节点,upload_id = "UP000000"int iCode = root["code"].asInt(); // 访问节点,code = 100std::string strMsg = root["msg"].asString();cout << "-upload_id = " << strUpload_id << "\t iCode = " << iCode << "\tmsg = " << strMsg << endl;std::string code;if (!root["files"].isNull()) // 访问节点,Access an object value by name, create a null member if it does not exist.{// 得到"files"的数组个数int file_size = root["files"].size();cout << "-file_size = " << file_size << endl;// 遍历数组std::string val_code = root["files"]["code"].asString();std::string val_msg = root["files"]["msg"].asString();std::string val_filename = root["files"]["filename"].asString();std::string val_filesize = root["files"]["filesize"].asString();std::string val_width = root["files"]["width"].asString();std::string val_height = root["files"]["height"].asString();cout << "--code =" << val_code << "\t msg=" << val_msg << "\t filename=" << val_filename \<< "\t filesize=" << val_filesize << "\t width" << val_width << "\t height =" << val_height << endl << endl;Json::Value val_image = root["files"]["image"];int image_size = val_image.size();cout << "image_size =" << image_size << endl;for(int j = 0; j < image_size; ++j){std::string url = val_image[j]["url"].asString();std::string type = val_image[j]["type"].asString();int width = val_image[j]["width"].asInt();int height = val_image[j]["height"].asInt();cout << "--url =" << url << "\t type =" << type \<< "\t width =" << width << "\t height =" << height << endl;}}}is.close();return 0;
}
1)别人的终究是别人的,别人的都是之前整理的。自己着实在前人的基础上,去下载、新建工程、单步调试代码、按照自己的想法构造Json,这是我想要的。
作者:铭毅天下
转载请标明出处,原文地址:http://blog.csdn.net/laoyang360/article/details/46757751
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!
JSON数据构造及解析详解相关推荐
- python 下 json 数据提取神器 jsonpath 详解
一.什么是jsonpath JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript.Python.PHP 和 Java. 二.特点 ...
- android Json解析详解(详细代码)
android Json解析详解(详细代码) JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当 ...
- JS/JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解
JS/JavaScript中解析JSON --- JSON.parse().JSON.stringify()以及$.parseJSON()使用详解 现在JSON格式在web开发中非常重要,特别是在使用 ...
- python 编码解码原理_Python JSON编解码方式原理详解
这篇文章主要介绍了Python JSON编解码方式原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 JSON(JavaScript Ob ...
- Android实战:CoolWeather酷欧天气(加强版数据接口)代码详解(上)
-----------------------------------该文章代码已停更,可参考浩比天气(更新于2019/6/25)----------------------------------- ...
- JWT(Json web token)认证详解
JWT(Json web token)认证详解 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该to ...
- mysql数据存储过程详解_mysql数据存储过程参数实例详解
MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...
- mysql-bin 查看_Mysql Binlog数据查看的方法详解
binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变. 改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕. binlog格式 ...
- <Zhuuu_ZZ>大数据技术之Flume详解
大数据技术之Flume详解 一 Flume配置 Flume安装地址 环境配置 验证 二 Flume基础架构 1.定义 2.Flume组成架构 3.Flume组件 Agent Source Channe ...
最新文章
- vue 绑定事件,获取元素对象
- JButton 圆角_ProE、Creo在玩具轿车设计中的一个案例应用解析|轿车|玩具|圆角
- python aes_python AES 加密
- poj 3281(最大流)
- python 抽象类和接口
- c java 引用类型_java中的引用类型
- 微信小程序 3 岁:日活超 3 亿,交易额超 8000 亿
- owncloud个人私有云 一键安装包操作指南
- 《浪潮之巅》读书笔记(上)
- 18650锂电池保护板接线图_锂电池保护板几种接线方法
- 如何用 NAS 搭建属于自己的云端书库 | 极客分享第 32 期
- kdj买卖指标公式源码_KDJ买卖副图指标 源码 通达信 贴图
- 用Gitolite 构建 Git 服务器
- 310实验室一点补充
- 微信小程序显示分页列表
- 大数相乘(数组表示)
- typedef 用法详解
- 2.4 设计评选优秀教师和学生的程序,其类结构如图 12.5 所示。当输入一系列教师 或学生的记录后,将优秀学生及教师的姓名列出来。 图 12.5 类结构 类 base char name[8]; 含
- Kafka源码阅读-Controller(二)管理brokers
- Robomongo的安装及简单使用