目录
1.JSON简介
2.结构形式
2.1 键值形式
2.2键-数组形式
2.3 键-值(键-值)形式
3. C++实现
3.1 读取JSON文件
3.2 写入JSON文件
1.JSON简介
JSON文件无论是在web开发、客户端开发、服务端等开发中都是应用比较广泛的的第一种轻量级数据交换格式,非常方便阅读和编写。也是开发、测试、运维人员必备的一项技能!!!
JSON是一种用于共享数据的开放标准文件格式,它使用人类可读的文本来存储和传输数据。JSON 文件以 .json 扩展名存储。JSON 需要较少的格式,是 XML 的一个很好的替代方案。JSON 源自 JavaScript,但它是一种独立于语言的数据格式。许多现代编程语言都支持 JSON 的生成和解析。
JSON 数据以 key/value 对形式写入。键和值由中间的冒号(:) 分隔,键在左边,值在右边。不同的键/值对由逗号 (,) 分隔。键是一个用双引号括起来的字符串,例如“name"。这些值可以是以下类型。
2.结构形式
2.1 键值形式
键值的形式,如下:
{
"name": "peter",
"age": 20,
"favoriteFruits": "apple"
}
2.2键-数组形式
键-数组的形式如下:
{
"name": ["peter", "tomy", "tina"]
"age": 20,
"favoriteFruits": "apple"
}
2.3 键-值(键-值)形式
键-(键-值)的形式,如下:
{
"peter ": {"20": "apple"},
"tomy": {"21": "pie"},
}
3. C++实现
3.1 读取JSON文件
假如,我们是先有一个Json文件想要读取,名称`type.json`,格式如下:
{
"NX": ["xxx M", "xxx S"],
"RK": { "name1": "NANO", "age" : 12 },
"ubuntu16": 25
}
使用C++读取,方式如下:
#include <iostream>
#include <fstream>
#include "jsoncpp.cpp"
int main()
{
Json::Reader reader;
Json::Value root; // 创建一个根节点用来接收解析出来的字符串
std::ifstream inff("camtype.json", std::ios::binary); // 读取当前文件
if (!inff.is_open()) // 判断文件是否正常打开
{
std::cout << "Error Opening! ";
return 0;
}
if (reader.parse(inff, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素
{
for (unsigned int i = 0; i < root["NX"].size(); i++) { // 读取:"NX": ["xxx M", "xxx S"]
std::string ach = root["NX"][i].asString();
std::cout << ach << '\t';
}
int ubuntu16 = root["ubuntu16"].asInt(); // 读取:"ubuntu16": 25
std::cout << std::endl << ubuntu16 << std::endl;
std::string name = root["RK"]["name1"].asString(); // 读取:"RK": { "name1": "NANO", "age" : 12}
std::cout << name << std::endl;
}
return 0;
}
3.2 写入JSON文件
在实际开发中,我们需要将我们的数据存储在Json文件中,因此,我们需要先创建键值形式的数据,然后再写入Json文件中,C++代码如下: 文章来源:https://www.toymoban.com/news/detail-621979.html
#include <iostream>
#include <fstream>
#include "jsoncpp.cpp"
int main()
{
Json::Value root1; // 创建根节点
root1["name"] = Json::Value("lian"); // 从根节点添加键-值对 "name": "lian"
root1["age"] = Json::Value("21"); // "age": "21"
Json::Value root2; // 创建子根节点
root2["father"] = Json::Value("lll"); // 为子根节点添加键-值对 "father": "lll"
root2["monther"] = Json::Value("ccc"); // "mother": "ccc"
root2["syster"] = Json::Value("lyy"); // "sister": "lyy"
root1["family"] = Json::Value(root2); // 将子根节点添加到根节点种
// "family":{"father": "lll", "mother": "ccc", "sister": "lyy"}
root1["hobby"].append("sing"); // 添加键-数组形式
root1["hobby"].append("run"); // hobby:[sing, run, taichi]
root1["hobby"].append("Tai Chi");
Json::StyledWriter sw; // 创建一个带格式的Json对象
std::ofstream omm; // 创建文件对象
omm.open("demo.json", std::ios::out | std::ios::app); // 创建文件
if (!omm.is_open())
std::cout << "error:can not find or create the file." << std::endl;
omm << sw.write(root1); // 将带格式的json对象的 根节点写入文件中
omm.close();
return 0;
}
执行代码后,可以生成一个demo.json文件,形式如下:文章来源地址https://www.toymoban.com/news/detail-621979.html
{
"name": "lian",
"age": "21",
"family": {"father": "lll", "mother": "ccc", "sister": "lyy"}
"hobby": [sing, run, taichi]
}
到了这里,关于C++ 读写Json文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!