jsoncpp使用笔记_jsoncpp asstring-程序员宅基地

  1. jsoncpp 中部分函数一览:
Value类型判断 值获取 操作
isNll()(bool类型) asBool() 数组操作[index]
isBool() asInt() isMember(key):bool
isInt() asString() 数组添加append(value)
isString() asDouble() removeMenber(key):Value
isArray() asArray() removeIndex(index,value):bool
isObject() size()
  1. jsoncpp读入文件
#include <string>
#include <json/json.h>
#include <iostream>
#include <fstream>
using namespace std;
 
void readFileJson(); //从文件中读取JSON,一个存储了JSON格式字符串的文件
 
int main(int argc, char *argv[]) 
{
    
	readFileJson();
	
	return 0;
}
 
//从文件中读取JSON
void readFileJson()
{
    
	Json::Reader reader;
	Json::Value root;
 
	//从文件中读取,保证当前文件有test.json文件
	ifstream in("test.json", ios::binary);
	//in.open("test.json", ios::binary);
 
	if( !in.is_open() )  
	{
     
	cout << "Error opening file\n"; 
	return; 
	}
 
	/*
	//test.json内容如下:
	{
		"name":"Tsybius",
		"age":23,
		"sex_is_male":true,
		"partner":
		{
			"partner_name":"Galatea",
			"partner_age":21,
			"partner_sex_is_male":false
		},
		"achievement":["ach1","ach2","ach3"]
	}
	*/
 
	if(reader.parse(in,root))
	{
    
	//读取根节点信息
	string name = root["name"].asString();
	int age = root["age"].asInt();
	bool sex_is_male = root["sex_is_male"].asBool();
 
	cout << "My name is " << name << endl;
	cout << "I'm " << age << " years old" << endl;
	cout << "I'm a " << (sex_is_male ? "man" : "woman") << endl;
 
	//读取子节点信息
	string partner_name = root["partner"]["partner_name"].asString();
	int partner_age = root["partner"]["partner_age"].asInt();
	bool partner_sex_is_male = root["partner"]["partner_sex_is_male"].asBool();
 
	cout << "My partner's name is " << partner_name << endl;
	cout << (partner_sex_is_male ? "he" : "she") << " is "
		<< partner_age << " years old" << endl;
 
	//读取数组信息
	cout << "Here's my achievements:" << endl;
	for(unsigned int i = 0; i < root["achievement"].size(); i++)
	{
    
		string ach = root["achievement"][i].asString();
		cout << ach << '\t';
	}
	cout << endl;
 
	cout << "Reading Complete!" << endl;
	}
	else
	{
    
	cout << "parse error\n" << endl;	
	}
 
	in.close();
}

3.转载: jsoncpp写出文件


#include <string>
#include <json/json.h>
#include <iostream>
#include <fstream>
using namespace std;
 
void writeFileJson();//将信息保存为JSON格式
 
int main(int argc, char *argv[]) 
{
    
	writeFileJson();
	
	return 0;
}
 
//将信息保存为JSON格式
void writeFileJson()
{
    
	//根节点
	Json::Value root;
	
	//根节点属性
	root["name"] = Json::Value("Mike Jiang");
	root["age"] = Json::Value(23);
	root["sex_is_male"] = Json::Value(true);
	
	//子节点
	Json::Value partner;
	
	//子节点属性
	partner["partner_name"] = Json::Value("Galatea");
	partner["partner_age"] = Json::Value(21);
	partner["partner_sex_is_male"] = Json::Value(false);
	
	//子节点挂到根节点上
	root["partner"] = Json::Value(partner);
	
	//数组形式
	root["achievement"].append("ach1");
	root["achievement"].append("ach2");
	root["achievement"].append("ach3");
	
	//直接输出
	cout << "FastWriter:" << endl;
	Json::FastWriter fw;
	cout << fw.write(root) << endl << endl;
	
	//缩进输出
	cout << "StyledWriter:" << endl;
	Json::StyledWriter sw;
	cout << sw.write(root) << endl << endl;
	
	//输出到文件
	ofstream os;
	os.open("demo.json");
	os << sw.write(root);
	os.close();
	
	/*
	//json文件内容如下:
	{
		"achievement" : [ "ach1", "ach2", "ach3" ],
		"age" : 23,
		"name" : "Mike Jiang",
		"partner" : {
			"partner_age" : 21,
			"partner_name" : "Galatea",
			"partner_sex_is_male" : false
		},
		"sex_is_male" : true
	}
	*/
 

  1. jsoncpp 读入字符串

#include <string>
#include <json/json.h>
#include <iostream>
#include <fstream>
using namespace std;
 
void readStrJson(); //从字符串中读取JSON
void readStrProJson(); //从字符串中读取JSON(内容复杂些)
 
int main(int argc, char *argv[]) 
{
    
	readStrJson();
	
	cout << "\n\n";
	readStrProJson();
	
	return 0;
}
 
//从字符串中读取JSON
void readStrJson() 
{
    
	//字符串
  const char* str = 
      "{\"praenomen\":\"Gaius\",\"nomen\":\"Julius\",\"cognomen\":\"Caezar\","
      "\"born\":-100,\"died\":-44}";
      
  /*
  //json内容如下:
  {
		"praenomen":"Gaius",
		"nomen":"Julius",
		"cognomen":"Caezar",
		"born":-100,
		"died":-44 
	}
  */
 
  Json::Reader reader;
  Json::Value root;
 
  //从字符串中读取数据
  if(reader.parse(str,root))
  {
    
      string praenomen = root["praenomen"].asString();
      string nomen = root["nomen"].asString();
      string cognomen = root["cognomen"].asString();
      int born = root["born"].asInt();
      int died = root["died"].asInt();
 
      cout << praenomen + " " + nomen + " " + cognomen
          << " was born in year " << born 
          << ", died in year " << died << endl;
  }
  
}
 
//从字符串中读取JSON(内容复杂些)
void readStrProJson() 
{
    
	string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";
	/*
	//json内容如下:
	{
    "name": "json″,
    "array": [
        {
            "cpp": "jsoncpp"
        },
        {
            "java": "jsoninjava"
        },
        {
            "php": "support"
        }
    ]
	}
	*/
 
 
	Json::Reader reader;
	Json::Value value;
 
	if (reader.parse(strValue, value))
	{
    
		string out = value["name"].asString();
		cout << out << endl;
		const Json::Value arrayObj = value["array"];
		for (unsigned int i = 0; i < arrayObj.size(); i++)
		{
    
			if (!arrayObj[i].isMember("cpp")) 
				continue;
			out = arrayObj[i]["cpp"].asString();
			cout << out;
			if (i != (arrayObj.size() - 1))
				cout << endl;
		}
	}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GENGXINGGUANG/article/details/106348156

智能推荐

2021年美赛C题目简述(中英文)_2021美赛c题-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏15次。2021年美赛C题目2021年美国大学生C题目为大数据类型题目,常用统计类的相关算法模型,推荐SAS,其次Stata,最后SPSS。2021年美赛C题目(中文):2021年美赛C题目(英文):相关算法以及代码实现会更新,敬请关注!最后祝愿各位同学争取佳绩!..._2021美赛c题

2023年全国职业院校技能大赛高职组大数据应用开发赛题第07套_1、根据hive的dwd库中相关表或mysql中ds_db01中相关表,计算出与用户customer-程序员宅基地

文章浏览阅读736次,点赞22次,收藏26次。环境说明:子任务一:Hadoop 完全分布式安装配置本任务需要使用root用户完成相关配置,安装Hadoop需要配置前置环境。命令中要求使用绝对路径,具体要求如下:1、从宿主机/opt目录下将文件hadoop-3.1.3.tar.gz、jdk-8u212-linux-x64.tar.gz复制到容器Master中的/opt/software路径中(若路径不存在,则需新建),将Master节点JDK安装包解压到/opt/module路径中(若路径不存在,则需新建),将JDK解压命令复制并粘贴至客户端桌面_1、根据hive的dwd库中相关表或mysql中ds_db01中相关表,计算出与用户customer_id

stm32f429跑linux,使用Buildroot编译STM32F429 linux内核,文件系统成功-程序员宅基地

文章浏览阅读760次。## Booting kernel from Legacy Image at c0007fb4 ...Image Name: linux-4.12_STM32F429Image Type: ARM Linux Kernel Image (uncompressed)Data Size: 2994400 Bytes =2.9 MBLoad Address: c0008000Entry..._stm32f429 linux

C语言----输入scanf和输出printf详解_scanf输入什么就一定会以printf的形式输出什么吗?-程序员宅基地

文章浏览阅读2.5k次,点赞4次,收藏22次。C语言编程中,输入输出是基本操作,printf和scanf并不是C语言中的唯一的输入输出选择,对于输入有scanf()、getchar()、getche()、getch()、gets();对于输出有printf()、puts()、putchar(),他们各有自己的使用场景,本篇文章主要介绍常用的scanf和printf。_scanf输入什么就一定会以printf的形式输出什么吗?

python图书推荐系统 爬虫技术 大数据 协同过滤推荐算法 计算机 毕业设计(附源码)-程序员宅基地

文章浏览阅读1.1k次,点赞30次,收藏25次。python图书推荐系统 爬虫技术 大数据 协同过滤推荐算法 计算机 毕业设计(附源码)

opengl 实现Skin Mesh(骨骼动画)- GPU_gpuskin-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏21次。上一篇博客实现了cpu skin(蒙皮)的骨骼动画,接下来我们要实现 gpu skin(蒙皮) 的骨骼动画首先我们需要知道什么是蒙皮,在上一博客实现的骨骼动画中,哪一步是蒙皮 。在模型文件中可以读到的数据是顶点和骨骼的对应关系,从动画文件中可以读到每一帧骨骼的数据,而根据每一帧骨骼的数据计算出顶点位置的过程就叫做蒙皮,也就是对应上一篇博客代码中的ComputeVertPos函数。另外还要知道为..._gpuskin

随便推点

Android简单的利用MediaRecorder进行录音 Android基础学习评论收藏举报-程序员宅基地

文章浏览阅读94次。亲,你的浏览器过时了,请立即更换Chrome浏览器。X您还未登录!|登录|注册|帮助CSDN首页资讯论坛博客下载搜索更多CTO俱乐部学生大本营培训充电移动开发软件研发云计算程序员TUP裴裴的Android学习和分享爱学习,爱分享。&lt;!--我的首页--&gt;..._android 添加录音评论

图形验证码+短信验证码【Java应用实例】_图形验证码下面如何写短信验证码-程序员宅基地

文章浏览阅读2.6w次,点赞19次,收藏60次。一、图形验证码的实现1.1 简介常在网上晃悠的人,对下面这张图都不会陌生。特别是在注册新账号、确认交易时,它们都会频繁出现,要求我们输入正确的验证码,那这些看上去跟我们要做的事情完全无关的验证码到底有何作用呢?其实,验证码的校验即是一个直接的图灵测试,简单的逻辑是:服务提供者向用户方提出一个较为复杂的问题,能正确回答的即是人类,回答不出的即是机器或者程序代码。这个概念基于这样一个重..._图形验证码下面如何写短信验证码

【UiPath2022+C#】UiPath Switch_uipath switch控件-程序员宅基地

文章浏览阅读1.2w次。本文主要介绍了UiPath的Switch语句实现方式。这大概是最详细的UiPath使用中文文档,环境:UiPath Studio Community 2022.4.3/Windows/C#,网上的文档和教程基本都是VB的,本文基于C#学习UiPath。_uipath switch控件

浅析 Node 进程与线程_nodejs pipe占用主线程吗?-程序员宅基地

文章浏览阅读267次。进程与线程是操作系统中两个重要的角色,它们维系着不同程序的执行流程,通过系统内核的调度,完成多任务执行。今天我们从 Node.js(以下简称 Node)的角度来一起学习相关知识,通过本文读者将了解 Node 进程与线程的特点、代码层面的使用以及它们之间的通信。概念首先,我们还是回顾一下相关的定义:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配..._nodejs pipe占用主线程吗?

(零)OpenStack ( Train版 ) 搭建环境_openstack train-程序员宅基地

文章浏览阅读849次。大多数 OpenStack 环境中包含认证、镜像、计算和至少一个网络服务,还有仪表盘,仪表盘要求至少要有镜像服务,计算服务和网络服务。配置每个节点必须用有管理员权限的帐号。可以用 root用户或 sudo 工具来执行这些命令。由于 Openstack 服务数量以及虚拟机数量,为了获得最好的性能,我们推荐你的环境满足或者超过最小的硬件需求。如果在增加了更多的服务或者虚拟机后性能下降,请考虑为你的环境增加硬件资源。为了避免混乱和为 OpenStack 提供更多资源,推荐最小化安装 Linux 系统。_openstack train

go 语言常量_go 常量-程序员宅基地

文章浏览阅读877次。go 语言常量_go 常量

推荐文章

热门文章

相关标签