ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Sword nlohmann::json的使用

2022-06-27 21:35:41  阅读:195  来源: 互联网

标签:obj1 obj name nlohmann json Sword type


#include <iostream>
#include <string>
#include<sstream>
#include "json.hpp"

// C++ 之 nlohmann::json 的使用

/*
知识补充:
    1. nlohmann::json编译依赖于-std=c++11
*/

// 初始化
void test1()
{
    nlohmann::json obj1, obj2, obj3, obj4;
    const char* p = "{\"age\":22,\"gender\":true,\"name\":\"jack\",\"pet\":{\"name\":\"wang\",\"type\":\"dog\"}}";
    std::istringstream ostr("{\"age\":45,\"gender\":true,\"name\":\"skipper\",\"pet\":{\"name\":\"wang\",\"type\":\"dog\"}}");
    
    // 示例json
    // {"age":22,"family":[{"call":"father","name":"adam"},{"call":"mother","name":"eve"},
{"call":"wife","name":"shine"}],"gender":true,"name":"jack","pet":{"name":"wang","type":"dog"}} // a.赋值构造 obj1["name"] = "jack"; //字符串 obj1["age"] = 22; //整数 obj1["gender"] = true; //布尔值 obj1["pet"] = { {"type","dog"}, {"name" , "wang" } }; //对象 /* 知识补充: nlohmann::json 中的数组是用{},而不是[] */ obj1["family"] = { {{"call","father"}, {"name" , "adam" }},{{"call","mother"}, {"name" , "eve" }} }; //数组 obj1["family"][2] = { {"call","wife"}, {"name" , "shine" } }; // 元素赋值 // b.直接构造 obj2 = { {"type","dog"}, {"name" , "wang" } }; // c.字符串构造 /* 知识补充: 注意nlohmann::json::parse()函数签名 nlohmann::json::parse(const char*, const char*) */ obj3 = nlohmann::json::parse(p, p + strlen(p)); // d.字符流构造(也可以使用std::ifstream之类替换) ostr >> obj4; } // 属性提取 void test2() { nlohmann::json tmp; const char* p = "{\"age\":22,\"gender\":true,\"name\":\"jack\",\"pet\":{\"name\":\"wang\",\"type\":\"dog\"}}"; nlohmann::json obj = nlohmann::json::parse(p, p + strlen(p)); // nlohmann::json为空判断(不可以使用NULL) if (nullptr == tmp) { std::cout << "empty" << std::endl; } // 提取字符串 std::string name = obj["name"].get<std::string>(); // 提取整型 int age = obj["age"].get<int>(); // 提取布尔值 bool gender = obj["gender"].get<bool>(); // 提取对象 nlohmann::json pet = obj["pet"]; std::cout << name << ":" << age << ":" << gender << std::endl; } // 数组遍历 void test3() { const char* p = "[{\"name\":\"1\",\"type\":\"a\"},{\"name\":\"2\",\"type\":\"b\"},
{\"name\":\"c\",\"type\":\"a\"},{\"name\":\"4\",\"type\":\"d\"}]"; nlohmann::json obj; obj = nlohmann::json::parse(p, p + strlen(p)); if (obj.empty()) { // 数组为空 std::cout << "The array is empty" << std::endl; return; } // 遍历数组 for (auto& item : obj.items()) { // item.value() = {"name":"1","type":"a"} std::cout << item.value() << std::endl; } } int main() { //test1(); //test2(); test3(); return 0; }

https://github.com/nlohmann/json

标签:obj1,obj,name,nlohmann,json,Sword,type
来源: https://www.cnblogs.com/zhanggaofeng/p/16417569.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有