刚工作不久,最近遇到一个要解析一个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数据的就可以了。

下面是我自己写的解析例子:

#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,我更建议自己度娘一下,然后自己会更清楚点。

这里有点需要注意:

"whitelist": {
"enable": "true",
"urls": [
{
"url": "http://www.baidu.com"
},
{
"url": "http://v.qq.com/"
}
]
}

待解析的json的以上部分如果改成:

"whitelist": {
"enable": "true",
"urls": [ "http://www.baidu.com",
"url": "http://v.qq.com/"
]
}

改成这种后再用以前的解析,解析到这里会出问题,以前的在urls数组中的元素仍然是json对象,改后urls里的元素不再是json对象,而是一个个的字符串元素。解析思路还是不变的只要将代码中:

tmp = arrayObj5[i]["url"].asString();

改成:

tmp = arrayObj5[i].asString();

这样就可以了。

jsoncpp用法通俗易懂之解析的更多相关文章

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

    void *upload(void *pParam) { CUpSender *s = (CUpSender*)pParam; map<string, string> mx; char t ...

  2. C++ Json工具--Jsoncpp用法简介

    文章目录 Json简介 用法简介 数据类型 C++代码示例 代码执行输出结果 JSON在线解析及格式化验证 - JSON.cn Json简介 JSON(JavaScript Object Notati ...

  3. Python 中 -m 的典型用法、原理解析与发展演变

    在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module- ...

  4. javascript:void(0);用法及常见问题解析

    void 操作符用法格式: javascript:void (expression) 下面的代码创建了一个超级链接,当用户以后不会发生任何事.当用户链接时,void(0) 计算为 0,但 Javasc ...

  5. json简介及JsonCpp用法

    [时间:2017-04] [状态:Open] [关键词:数据交换格式,json,jsoncpp,c++,json解析,OpenSource] json简介 本文仅仅是添加我个人对json格式的理解,更 ...

  6. Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析

    Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidj ...

  7. tinyXML的用法,用于解析gpx文件

    tinyxml是一个开源的C++xml解析工具集,简单.轻量而又高效,所以对于处理xml文件是一个非常不错的选择. 由于它开源,所以可以方便地免费下载,下载地址百度一下很容易找到,这里就不多说了. 下 ...

  8. springMVC源码分析--@SessionAttribute用法及原理解析SessionAttributesHandler和SessionAttributeStore

    @SessionAttribute作用于处理器类上,用于在多个请求之间传递参数,类似于Session的Attribute,但不完全一样,一般来说@SessionAttribute设置的参数只用于暂时的 ...

  9. C++ Jsoncpp源代码编译与解析Json

    1.Json 数据表示方式介绍 这个可以看之前的一个文章里面有说明:Java解析(读取)Json数据 2.C++ Jsoncpp 2.1 Jsoncpp介绍 (1)JsonCpp主要包含三种类型的cl ...

随机推荐

  1. python numpy 模块简单介绍

    用python自带的list去处理数组效率很低, numpy就诞生了, 它提供了ndarry对象,N-dimensional object, 是存储单一数据类型的多维数组,即所有的元素都是同一种类型. ...

  2. css cursor属性详解

    cursor                       // 鼠标移上去的鼠标状态 属性值有以下: (可以将鼠标移上以下属性值看看效果) auto crosshair default pointer ...

  3. launch文件概述---1

    摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 资源链接:http://wenku.baidu.com/link?url=PhyN3C6ghqo ...

  4. JavaScript学习记录总结(七)——dom对象应用之用户简单管理

    <!DOCTYPE html><html><head><title>users.html</title> <meta name=&qu ...

  5. 编码规范(二)之Code Templates的设置(转)

    http://swiftlet.net/archives/1199 编码规范(二)之Code Templates的设置(转) 文件(Files)注释标签:/** * @Title: ${file_na ...

  6. Python小白好教程

    提供一些Python的基础教程. Crossin的编程教师:网址:http://crossincode.com/home/ 廖雪峰的官方网站 网址:http://www.liaoxuefeng.com ...

  7. 利用 t-SNE 高维数据的可视化

    利用 t-SNE 高维数据的可视化  具体软件和教程见: http://lvdmaaten.github.io/tsne/  简要介绍下用法: % Load data load ’mnist_trai ...

  8. Logistic回归的牛顿法及DFP、BFGS拟牛顿法求解

    牛顿法 # coding:utf-8 import matplotlib.pyplot as plt import numpy as np def dataN(length):#生成数据 x = np ...

  9. 正则表达式 ——python 基础

    一.引言 正则表达式是含有文本和特别字符的字符串,这些文本和特别字符描述的模式可以识别各种字符串. 正则表达式的强大之处在于特殊符号的应用,特殊符号定义了字符集合.子组匹配,模式重复次数...正是这些 ...

  10. ASP.NET中JSON的序列化和反序列化

    JSON是专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式.在网站应用中使用JSON的场景越来越多,本文介绍 ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介 ...