json的基本用法

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。它基于 JavaScript 的一个子集,但独立于语言,因此被广泛用于前后端数据交互、配置文件、API 响应等场景。

JSON 基本结构

JSON 的数据类型包括:
对象(Object):键值对的集合,用 {} 包裹。
数组(Array):有序值的列表,用 [] 包裹。
值(Value):可以是字符串、数字、布尔值、对象、数组、null

{
  "name": "John Doe",
  "age": 30,
  "isStudent": false,
  "hobbies": ["reading", "traveling"],
  "address": {
    "street": "123 Main St",
    "city": "New York"
  },
  "nullValue": null
}

基本用法

创建和初始化 JSON 对象

#include <nlohmann/json.hpp>
using json = nlohmann::json;

int main() {
    json j1; // 空 JSON 对象
    json j2 = "Hello"; // 字符串
    json j3 = {1, 2, 3}; // 数组
    json j4 = {{"key", "value"}}; // 对象
    return 0;
}

序列化和反序列化

dump():
将 JSON 对象序列化为字符串。
参数:
indent:缩进空格数(默认为 0,即紧凑格式)。
ensure_ascii:是否转义非 ASCII 字符(默认为 true)。

json j = {{"name", "John"}, {"age", 30}};
std::string s = j.dump(4); // 带缩进的字符串
std::cout << s << std::endl;
// 输出:
// {
//     "name": "John",
//     "age": 30
// }

parse()(静态方法):
从字符串解析 JSON 对象。

std::string jsonStr = R"({"name": "John", "age": 30})";
json j = json::parse(jsonStr);
std::cout << j["name"] << std::endl; // 输出: "John"

访问和修改数据

operator[]:
访问或修改 JSON 对象的字段(键值对)。
如果键不存在,会插入一个 null 值。

json j = {{"name", "John"}};
j["age"] = 30; // 添加或修改字段
std::cout << j["name"] << ", " << j["age"] << std::endl; // 输出: "John, 30"

at():
访问 JSON 对象的字段(键值对),如果键不存在会抛出异常。

json j = {{"name", "John"}};
try {
    std::cout << j.at("name") << std::endl; // 输出: "John"
    std::cout << j.at("age") << std::endl; // 抛出异常
} catch (const std::out_of_range& e) {
    std::cerr << "Key not found: " << e.what() << std::endl;
}

push_back() 和 operator+=:
向 JSON 数组添加元素。

json j = json::array(); // 空数组
j.push_back(1);
j.push_back(2);
j += 3; // 等价于 j.push_back(3)
std::cout << j << std::endl; // 输出: [1, 2, 3]

类型检查和转换

is_*() 系列函数:
检查 JSON 值的类型。
常用函数:
is_null()
is_boolean()
is_number()
is_string()
is_array()
is_object()

遍历 JSON 对象和数组

遍历对象:
使用范围 for 循环遍历键值对。

json j = {{"name", "John"}, {"age", 30}};
for (auto& [key, value] : j.items()) {
    std::cout << key << ": " << value << std::endl;
}
// 输出:
// name: "John"
// age: 30

删除和清除数据

erase():
删除 JSON 对象的字段或数组的元素。

json j = {{"name", "John"}, {"age", 30}};
j.erase("age"); // 删除字段
std::cout << j << std::endl; // 输出: {"name": "John"}

clear():
清空 JSON 对象或数组。

json j = {1, 2, 3};
j.clear(); // 清空数组
std::cout << j.empty() << std::endl; // 输出: 1 (true)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值