我是靠谱客的博主 善良鲜花,最近开发中收集的这篇文章主要介绍C++使用jsoncpp解析json的方法示例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言:

曾经一段时间XML成为互联网业界内的数据传输格式标准,但有人对XML提出了质疑,认为XML数据格式比较繁杂,冗长等,于是提出了一种新的表示格式—JSON。

对于JSON格式,在此就不作详细的说明了,下面主要讨论下C++解析json文件的工具—Jsoncpp的使用。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录。
Jsoncpp是个跨平台的开源库,下载地址:http://sourceforge.net/projects/jsoncpp/。

解压:tar -zvxf jsoncpp-src-0.5.0.tar.gz

进入到jsoncpp解压目录下,执行命令:

sudo scons platform=linux-gcc

将/jsoncpp-src-0.5.0/include/目录下的json文件夹拷贝到 /usr/local/include/

将jsoncpp-src-0.5.0/libs/linux-gcc-4.9.1/目录下的libjson_linux-gcc-4.9.1_libmt.a 拷贝到 /usr/local/lib/ 下,并为了方便使用,将其重命名为libjson.a

Jsoncpp使用说明:

下面通过一个简单的case说明jsoncpp里主要的接口函数,通过这些基本的函数便可以完成的Json文件的解析和处理。

jsoncpp中主要的类:

  • Json::Value:可以表示所有支持的类型,如:int , double ,string , object, array等。其包含节点的类型判断(isNull,isBool,isInt,isArray,isMember,isValidIndex等),类型获取(type),类型转换(asInt,asString等),节点获取(get,[]),节点比较(重载<,<=,>,>=,==,!=),节点操作(compare,swap,removeMember,removeindex,append等)等函数。
  • Json::Reader:将文件流或字符串创解析到Json::Value中,主要使用parse函数。Json::Reader的构造函数还允许用户使用特性Features来自定义Json的严格等级。
  • Json::Writer:与JsonReader相反,将Json::Value转换成字符串流等,Writer类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter(将数据写入一行,没有格式),Json::StyledWriter(按json格式化输出,易于阅读)。
  • Json::Reader可以通过对Json源目标进行解析,得到一个解析好了的Json::Value,通常字符串或者文件输入流可以作为源目标。

json示例:

[
 { "name": "json",
  "lines": 
   [
    { "line": "1" },
    { "line": "2" },
    { "cpp": "jsoncpp" },
    { "java": "jsoninjava" },
    { "php": "support" }
   ]
 },
 { "name": "c++",
  "lines": 
   [
    { "line": "3" },
    { "line": "4" },
    { "cpp": "jsoncpp" },
    { "java": "jsoninjava" },
    { "php": "nosupport" }
   ]
 }
]

C++代码:

#include <iostream>
#include <fstream>
#include <string>
#include "../src/json/json.h"
 
using namespace std;
using namespace Json;
void main()
{
  fstream ofile("json.json");
  string strjson;
  if (!ofile.is_open()) {
    return;
  }
 
  string strline;
  while (getline(ofile, strline)) {
   strjson += strline;
  }
  
  ofile.close();
  
  Json::Reader reader;  // 读取器
  Json::Value root;    // Value的值值可以是任一对象
  
  if (reader.parse(strjson, root)) {
  
    int size = root.size();   // 根结点个数
  
    for (int j = 0; j < size; j++) {
      
      cout << root[j]["name"].asString() << endl;
 
      const Json::Value arrayObj = root[j]["lines"];
 
      for (int i = 0; i < arrayObj.size(); i++) {
 
        if (arrayObj[i].isMember("line")) {
          cout << arrayObj[i]["line"].asString() << endl;
        }
        if (arrayObj[i].isMember("cpp")) {
          cout << arrayObj[i]["cpp"].asString() << endl;
        }
        if (arrayObj[i].isMember("java")) {
          cout << arrayObj[i]["java"].asString() << endl;
        }
    
        int m = 0;
      }
    }
  }
 
}

 到此这篇关于C++使用jsoncpp解析json的方法示例的文章就介绍到这了,更多相关C++ jsoncpp解析json内容请搜索靠谱客以前的文章或继续浏览下面的相关文章希望大家以后多多支持靠谱客!

最后

以上就是善良鲜花为你收集整理的C++使用jsoncpp解析json的方法示例的全部内容,希望文章能够帮你解决C++使用jsoncpp解析json的方法示例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(352)

评论列表共有 0 条评论

立即
投稿
返回
顶部