前言
什么是 JSON ?
- JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
- JSON 是轻量级的文本数据交换格式
- JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持 JSON
- JSON 具有自我描述性,更易理解
这里有一些json的工具以后可能会用到:
JSON 格式化工具
JSON 转义/去除转义
JSON 在线解析工具
JSON 差异对比工具
来开始看看json的结构
1 2 3 4 5 6 7 8 9 10 11 12 13
| { "name":"wangsong", "age":"23", "hobbies":["Swimmming","Running"], "address":{ "city":"Huzhou", "Inc":"Huzhou institute of Zhejiang University", "coordinates":{ "latitude":40.7128, "longitude":-74.0060 } } }
|
在json中使用{}来定义一个对象,括号中的一切都代表存储数据的键值对
其中name是键(key),wangsong是值(value)
数组采用[]进行定义其中的元素用,分隔
每个键值对之间用逗号隔开直到最后一个
可以在json中进行对象的嵌套
让我们看看如何访问json文件
python
使用json模块将json数据转换为字典进行使用
1 2 3 4
| import json personal_data = json.loads(personal_data.json)
print(personal_data['name'])
|
cpp
在cpp中想要使用json文件就需要配置jsoncppp了
拉取jsoncpp的源码
打开你下载的jsoncpp文件夹
双击运行amalgamate.py文件(需要有python环境)
操作后,会生成一个dist的文件夹里面就是我们需要的jsoncpp的源代码了,只有三个文件可以直接包含到项目中一起编译这个源文件还是跨平台的,在windows下和linux下都可以使用
或者按照我接下来的实践进行操作
拉取jsoncpp源码,查看源码中找到cmake安装文件进行安装
编写流式读取代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include <json/json.h> #include <fstream> #include <iostream>
using namespace std;
int main() { ifstream ifs("myjson/wangsong.json"); if (!ifs.is_open()) { cerr << "错误:无法打开文件" << endl; return 1; }
Json::Reader reader; Json::Value root; if (!reader.parse(ifs, root)) { cerr << "JSON解析错误:" << reader.getFormattedErrorMessages() << endl; return 1; }
cout << "姓名: " << root["name"].asString() << endl; if (root.isMember("age")) { cout << "年龄: " << root["age"].asString() << endl; } else { cout << "警告:未找到年龄字段" << endl; } cout << "爱好: "; const Json::Value& hobbies = root["hobbies"]; for (const auto& hobby : hobbies) { cout << hobby.asString() << " "; } cout << endl; const Json::Value& address = root["address"]; cout << "城市: " << address["city"].asString() << endl; cout << "机构: " << address["Inc"].asString() << endl; const Json::Value& coords = address["coordinates"]; cout << "纬度: " << coords["latitude"].asFloat() << endl; cout << "经度: " << coords["longitude"].asFloat() << endl;
return 0; }
|
- 输入代码进行编译
g++ filename.cpp -ljsoncpp -std=c++11 -o progname,也可以使用ctrl + shift +b进行编译但是要注意修改taske.josn中的配置。

成功编译后输入./progname进行运行
