重明鸟软件知识平台
@C/C++读取JSON
C++能使用JSON吗。答案是肯定的。其实不光是C++,像JAVA,PHP等主流和非主流语言都能使用JSON。JSON官网:www.json.org。上面就有各个语言使用JSON的开源工具下载。其中C++的JSON工具比较著名的是JSONCPP。我就是介绍他的。

JSONCPP官网是http://sourceforge.net/projects/jsoncpp/。我们可以下载最新的开发包。jsoncpp-src-0.5.0.tar.gz.

使用JsonCpp前先来熟悉几个主要的类:
Json::Value 可以表示里所有的类型,比如int,string,object,array等,具体应用将会在后边示例中介绍。
Json::Reader 将json文件流或字符串解析到Json::Value, 主要函数有Parse。
Json::Writer 与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。

解压这个包后。我们用CODEBLOCKS插入makefiles/VS71/jsoncpp.sln这个工程文件(用VC也行)。为什么用CODEBLOCKS呢?这样不管我们在LINUX还是WINDOWS下都可以使用了。编译好后就可以写程序了。我们看个示例代码。
main.cpp
#include <iostream>
#include <json.h>
 
using namespace std;
 
int main(int argc, char** argv)
{
    Json::Value obj;
 
    obj["foo"] = true;
    obj["val1"] = 3;
    obj["val2"] = "hello";
    obj["val3"].append("123");
    obj["val3"].append(9.04f);
    obj["val3"].append("123323");
    obj["val3"].append("fidsifoj");
 
    Json::Value o;
    o["failure"] = true;
    o["success"] = "no way";
 
    obj["baz"] = o;
 
    cerr << obj << endl;
    return 0;
}

注意:在Codeblocks里设置好JSON的头文件目录和库文件引用。
执行效果:

以上是生成JSON的过程。解释JSON数据给C++调用是这样的
int ParseJsonFromString()  
{  
  const char* str = "{"uploadid": "UP000000","code": 100,"msg": "","files": ""}";  
   
  Json::Reader reader;  
  Json::Value root;  
  if (reader.parse(str, root))  // reader将Json字符串解析到root,root将包含Json里所有子元素   
  { 
	// 访问节点,upload_id = "UP000000"   
    std::string upload_id = root["uploadid"].asString();  	
	
    int code = root["code"].asInt();    // 访问节点,code = 100   
  }  
  return 0;  
}  

Copyright @ 2011-2018 by szc  桂ICP备11003301号-1  桂公网安备45040302000027号  Email:szcsoft@qq.com