jsoncpp用法通俗易懂

刚工作不久,最近遇到一个要解析一个web服务器发过来的json格式的文件,文件如下:

{
    "global": {
        "renew": "true",
        "serverurl": "192.168.1.100:31208/opinfo/",
        "frequency": "60"
    },
    "auth": {
        "enable": "true",
        "url": "http://192.168.1.10:31208/authpage/13405/文件名"
    },
    "offline": {
        "enable": "true",
        "url": "http://192.168.1.10:31208/offinenotify",
        "parameters": "um#dm#ot#uf#df"
    },
    "jump": {
        "enable": "true",
        "url": "http://nav.cathay/index.html",
        "parameters": "un#dm#um#ui#di#jt"
    },
    "urlwrite": {
        "enable": "true",
		"uploadfrequency": "180",
		"uploadurl": "http://192.168.1.10:31208/uwdupload",
        "urls": [
            {
 				  "id": "1",
                "origin": "http://www.baidu.com",
                "purpose": "http://www.baidu.com?id=cathay",
                "terminal": "pc",
                "percent": "50"
            },
            {
				"id": "2",
                "origin": "http://www.soso.com",
                "purpose": "http://www.baidu.com?id=cathay",
                "terminal": "ios",
                "percent": "50"
            },
            {
				"id": "3",
                "origin": "http://www.google.com",
                "purpose": "http://www.baidu.com?id=cathay",
                "terminal": "android",
                "percent": "100"
            }
        ]
	},
	"whitelist": {
        "enable": "true",
        "urls": [
            {
                "url": "http://www.baidu.com"
            },
            {
                "url": "http://v.qq.com/"
            }
        ]
	}
}

解析一下这个json格式的文件
整个文件被一个大括号包含,相当于一个对象,在json中{}包含着的是对象
在这个大对象中又包含global、auth、offline、jump、urlwrite、whitelist这几个对象,这几个名字分别是对象名
像在global、auth、offline、jump中已经不存在对象,只有数据即:“名称:值”,这样的在大对象中取出global、auth、offline、jump这几个对象后就可以取值了
像urlwrite、whitelist这两个对象中又包含着对象,那么要在urlwrite、whitelist的基础上再取对象,然后再取值
这里在json中[]代表这是一个数组。

其实关键是你在处理之前先了解好json它的数据格式到底是什么样,再去了解jsoncpp是怎样解析json数据的就可以了。

下面是我自己写的解析demon:

#include "json/json.h"
#include <string>
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream is;
    is.open ("A1-F2-DF-Q2-DC.html", std::ios::binary );
     Json::Reader reader;
     Json::Value root;
	 cout << "beginning...." << endl;
     if(reader.parse(is,root))
     {
		    cout << "将整个Json对象的value保存到root中去了" << endl;
			cout << endl;
		 	Json::Value arrayObj = root["global"];
		 	string tmp = arrayObj["renew"].asString();
			cout << "global---renew:" << tmp << endl;
		    tmp.clear();
			tmp = arrayObj["serverurl"].asString();
			cout << "global---serverurl:" << tmp << endl;
			tmp.clear();
			tmp = arrayObj["frequency"].asString();
			cout << "global---frequency:" << tmp << endl;
            tmp.clear();
			cout << endl;

			Json::Value arrayObj1 = root["auth"];
			tmp = arrayObj1["enable"].asString();
			cout << "auth---enable:" << tmp << endl;
			tmp.clear();
			tmp = arrayObj1["url"].asString();
			cout << "auth---url:" << tmp << endl;
			tmp.clear();
			cout << endl;

			Json::Value arrayObj2 = root["jump"];
			tmp = arrayObj2["enable"].asString();
			cout << "jump---enable" << tmp << endl;
			tmp.clear();
			tmp = arrayObj2["url"].asString();
			cout << "jump---url" << tmp << endl;
			tmp.clear();
			tmp = arrayObj2["parameters"].asString();
			cout << "jump---parameters" << tmp << endl;
			tmp.clear();
			cout << endl;

			Json::Value arrayObj3 = root["offline"];
			tmp = arrayObj3["enable"].asString();
			cout << "jump---enable" << tmp << endl;
			tmp.clear();
			tmp = arrayObj3["url"].asString();
			cout << "jump---url" << tmp << endl;
			tmp.clear();
			tmp = arrayObj3["parameters"].asString();
			cout << "jump---parameters" << tmp << endl;
			tmp.clear();
			cout << endl;

			Json::Value arrayObj4 = root["whitelist"];
			tmp = arrayObj4["enable"].asString();
			cout << "whitelist---enable:" << tmp << endl;
			tmp.clear();
			Json::Value arrayObj5 = arrayObj4["urls"];
			for(int i = 0; i != arrayObj5.size(); i++)
			{
				tmp = arrayObj5[i]["url"].asString();
				cout << "whitelist---url" << i << ":" << tmp << endl;
				tmp.clear();
			}

			Json::Value arrayObj6 = root["urlwrite"];
			tmp = arrayObj6["enable"].asString();
			cout << "urlwrite---enable:" << tmp << endl;
			tmp.clear();
			tmp = arrayObj6["uploadfrequency"].asString();
			cout << "urlwrite---uploadfrequency:" << tmp << endl;
			tmp = arrayObj6["uploadurl"].asString();
			cout << "urlwrite---uploadurl:" << tmp << endl;
			tmp.clear();
			Json::Value arrayObj7 = arrayObj6["urls"];
			for(int i = 0; i != arrayObj7.size(); i++)
			{
				tmp = arrayObj7[i]["id"].asString();
				cout << "urlwrite---urls---id:" << tmp << endl;
				tmp.clear();
				tmp = arrayObj7[i]["origin"].asString();
				cout << "urlwrite---urls---origin:" << tmp << endl;
				tmp.clear();
				tmp = arrayObj7[i]["purpose"].asString();
				cout << "urlwrite---urls---purpose:" << tmp << endl;
				tmp.clear();
				tmp = arrayObj7[i]["terminal"].asString();
				cout << "urlwrite---urls---terminal:" << tmp << endl;
				tmp.clear();
				tmp = arrayObj7[i]["percent"].asString();
				cout << "urlwrite---urls---percent:" << tmp << endl;
				tmp.clear();
			}
     }
     return 0;
}

编译操作:g++ c.cpp -I ./include/ libjson_linux-gcc-4.8_libmt.a

这里解析一下,include和.a文件都是编译jsoncpp生成的,至于怎么编译jsoncpp,我更建议自己度娘一下,然后自己会更清楚点。

时间: 2024-09-29 10:01:01

jsoncpp用法通俗易懂的相关文章

jsoncpp用法通俗易懂之将数据合成json格式

void *upload(void *pParam) { CUpSender *s = (CUpSender*)pParam; map<string, string> mx; char tmp[20] = {0}; char filename[50] = {0}; string data = ""; while(1) { mx.clear(); FileLog(FILENAME, "in thread m_urlcount = [%d]", s->

jsoncpp 用法

1 样本案例 1.1数据内容是一个数组 { "success" : false, "toReturn" : [ { "createTime" : "20080806114526000+0800", "createUser" : "张三" } ], "total" : 1 } 代码 #include <iostream> #include <fstre

const用法总结(通俗易懂)

const的意思可以概括为"一个不能被改变的普通变量",使得const在一定程度上提高程序的安全性和可靠性. const的几种情况: 1. const的普通用法 int const size: const int size: 这两条语句都是把size声明为一个整数,他的值不能被修改. 可以在声明的时候对他进行初始化, int const size =10: 错误用法: const int size =10: char buffer[size]; 错误在于,size占用某内存块,C编译器

哪些英语用法是普通中国学生最生疏的?

请附上例句和解释,谢谢!如果能分别说一下美国.英国.澳大利亚的本地用法更好. 传送门:你知道哪些中国人普遍生疏但意境很美的英语词汇? - 英语翻译哪些英语母语者常用的词组对于普通中国大学生来说是生疏的? - 英语翻译 谢老珂 ,骨子里是文科生 5360 人赞同 4.14.2016 更新 36-40.(谢谢知友们的赞,留言和私信.这个搬运工的活儿我做得很开心.会继续更新.) 11.21.2015更新 31-35.8.25.2015更新 26-30.8.11.2015更新 23-25.8.4.201

初涉IPC,了解AIDL的工作原理及用法

初涉IPC,了解AIDL的工作原理及用法 今天来讲讲AIDL.这个神奇的AIDL,也是近期在学习的,看了某课大神的解说写下的blog,希望结合自己的看法给各位同价通俗易懂的解说 官方文档:http://developer.android.com/guide/components/aidl.html 一.What is AIDL?(什么是AIDL) AIDL:Android Interface Definition Language (Android接口定义语言) 首先,我们要知道.进程1和进程2

Delphi编程建议遵守的规范1---缩进、各种语句的用法

在编程时候,尤其是在一个大的团队里面,遵守统一的编程规范是极其重要的.为所有的开发人员制定一个源代码书写标准,以及程序和文件的命名标准,使他们在编程时有一致的格式,这样,每个编程人员编写的代码能够被其他人理解,减少程序维护和移交的成本. 这里先只介绍关于Delphi语言的编程规范,暂时跳过文件.项目命名…… 1.1.关于缩进 缩进能够更清晰的展示源码的逻辑结构,采用两个空格字符,不能使用制表符(即Tab字符).这是因为,制表符的宽度随着不同源码编缉工具及不同的设置,展示出来的效果不一样,如果空格

实例详解C#抽象类及其用法(转)

今天学习抽象类和方法,对应该什么时候使用大伤脑筋,百度文库中找到一篇<实例详解C#抽象类及其用法>,觉得该例子通俗易懂,很好地解释了为什么要使用.如何使用抽象类和抽象方法,遂复制过来留存. 假如现在要开发一个模拟CS的游戏.要求如下: 1.游戏中要有恐怖分子,一个恐怖分子一次只能持有一支枪 2.游戏中有多种枪支 3.恐怖分子可以选择枪支使用 4.恐怖分子可以开枪杀人仅此4条,为了使程序足够简单,能说明我们主要目标就行,所以我们用控制台程序来模拟实现. 方法1我们先来看第一种实现情况,假设,游戏

STL list链表的用法详解(转)

本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 0 前言 1 定义一个list 2 使用list的成员函数push_back和push_front插入一个元素到list中 3 list的成员函数empty() 4 用for循环来处理list中的元素 5 用STL的通用算法for_each来处理list中的元素 6 用STL的通用算法count_if()来统计list中的元素个数 7 使用count_i

第三方库 jsoncpp 读写json

一.摘要 JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式. 本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C++ 语言来处理 JSON.关于 JSON 更具体的信息,可参见 JSON 官网:http://www.json.org. 二.本文选择处理 JSON的 C++ 库 本文选择一个第三方库 jsoncpp 来解析 JSON.json