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

智能推荐

数据导入到Access特别慢的解决办法-程序员宅基地

文章浏览阅读1k次。数据导入到Access有人说用事务,我在开发中用了事务还是特别慢,可能是因为Access数据库不支持批量执行SQL语句的原因吧,虽然微软建议使用ADO.NET操作数据库,但对于Access来说效率太差了,可有时候又迫不得已只能用Access,那么我们只用换一种操作数据库的方式了,这次用到了ADODB,虽然ADODB已经过时了,但它对数据库的直接操作还是要比封装好的ADO.NET快很多。下面是代码。..._excel向access追加记录 很慢 vb.net

ffmpeg下载安装教程_ffmpeg官网下载-程序员宅基地

文章浏览阅读2.1k次。ffmpeg下载安装教程_ffmpeg官网下载

内核开发基础——'make menuconfig' requires the ncurses libraries-程序员宅基地

文章浏览阅读92次。root@zhangbin-desktop-ubuntu:/usr/src/linux-headers-2.6.32-27# make menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC scripts/basic/hash HOSTCC scripts/kconfig..._make menuconfig' requires the ncurses libraries.

Emacs之ditaa与PlantUML与dot绘图环境配置-程序员宅基地

文章浏览阅读688次。本文介绍如何使用ditaa与PlantUML与dot进行绘制流程图。ditaa与PlantUML都依赖java环境,所以事先需要有Java环境(不管我们使用的是何种OS)。Java环境的设置很简单,如果本地没有Java环境,请到Oracle官网下载之,这里就省略了。而dot绘图语言需要安装graphviz软件。本文作者使用的Windows环境..._ditaa图 plantuml

Ajax框架,DWR介绍,应用,样例-程序员宅基地

文章浏览阅读93次。使用Ajax框架1. 简化JavaScript的开发难度2. 解决浏览器的兼容性问题3. 简化开发流程经常使用Ajax框架Prototype一个纯粹的JavaScript函数库,对Ajax提供良好支持jQuery1.很优秀的JavaScript库,对Ajax提供了良好的支持2.与Prototype设计思想不同的是在使用jQuery之后,开..._dwr ajax简单介绍

如何在vue中拖动改变侧边栏div的宽度-程序员宅基地

文章浏览阅读4k次。先贴html代码<template> <div class="box-wrap"> <div class="box" id="box"></div> <div class="drag-btn" id="dragBtn" @mousedown.stop.prevent="mouseDownLeft"></div>..._vue 侧边栏拉伸宽度

随便推点

java根据IP获取当前区域天气信息-程序员宅基地

文章浏览阅读476次。java根据IP获取当前区域天气信息大致思路是客户端发起请求,我们首先根据请求获取到外网IP,然后再根据外网IP获取到用户所在城市,最后根据城市获取到天气信息获取外网IP万网获取外网IP地址: http://www.net.cn/static/customercare/yourip.asp/** * @Description:获取客户端外网ip 此方法要接入互联网才行,内网不行 **/public static String getPublicIp() { try {

python实现通讯录功能_Python 实现简单的电话本功能-程序员宅基地

文章浏览阅读1k次。#!/usr/bin/python# -*- coding: utf-8 -*-import reclass PhoneBook(object):'''这是一个电话簿脚本。该脚本能够实现AddContact:添加联系人信息ShowContact:查找姓名显示联系人SaveContacts:存储联系人到 TXT 文档(存储格式——姓名:号码/号码)LoadContacts:从 txt 文档中载入联系..._python输入电话号码按列显示

mysql添加列和索引_添加列且甚索引-程序员宅基地

文章浏览阅读3.8k次。mysql添加列 alter table to_o2o_point_record add COLUMN channel VARCHAR(64) NULL DEFAULT NULL COMMENT ‘积分渠道’; alter table to_o2o_point_record add COLUMN channel VARCHAR(64) NULL DEFAULT NULL COMMENT ‘积分渠_添加列且甚索引

初识函数-----函数的定义及用法_程序设计函数的定义是-程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏9次。初识函数-----函数的定义及用法_程序设计函数的定义是

python在医学领域应用 课程_《Python程序设计与应用》在线课程使用说明-程序员宅基地

文章浏览阅读492次。《Python程序设计与应用》在线课程使用说明网页版链接 20200223 更新一、简介本课程内容包括Python基础语法与Python应用(数据处理、可视化等)。具体章节:Python基础、内置基本数据类型、程序结构、函数、异常处理、集合与字典类型、文件操作、Python应用(科学计算numpy、pandas、matplotlib、seaborn、网络信息安全基础)。主要资源:超星MOOC平台:..._python语言程序设计与医学实践

c/c++ assert的头文件_c++ assert头文件-程序员宅基地

文章浏览阅读2.5k次。#include <iostream>#include <assert.h>using namespace std;int writestr(const char *p){ assert(0!=p);//如果p等于0,则报错误 cout<<p<<endl;}int _tmain(int argc, _TCHAR* argv[]){ char *str="hello"; writestr(str); ..._c++ assert头文件