C++上Json的使用说明(从下载到生成库再到使用)

C++上Json的使用说明(从下载到生成库再到使用)

1、如何得到c++对应自己vs版本的json库文件

(1)下载json源码

本文选择一个第三方库 jsoncpp 来解析 JSON。jsoncpp 是比較出名的 C++ JSON 解析库。在 JSON官网也是首推的。下载地址为:http://sourceforge.net/projects/jsoncpp。本文使用的 jsoncpp 版本号为:0.5.0。下载得到jsoncpp-src-0.5.0.tar.gz压缩文件。

(2)编译生成静态库

下载的原工程并非对应的vs版本,因此需要使用本电脑的vs2015打开,重建工程如下。
在这里插入图片描述
可能会存在如下问题:
1)在对应目录中找不到lib_json.lib问题。输出路径问题,属性–》库管理器–》输出文件,修改对应名字即可。
(2)应该正确设置运行库模式,属性–》C/C++ --》代码生成 --》运行库–》选择 多线程调试(MTD)。
经过以上步骤,便可生成对应静态库lib_json.lib。

2、使用Json库实例

(1)建立工程引入头文件和json库

建立vs2015的c++工程,将包含头文件的json文件夹以及lib_json.lib库添加进工程如下:

在这里插入图片描述
在这里插入图片描述

(2)学习json的三个类及使用

jsoncpp 主要包括三种类型的 class:Value、Reader、Writer。jsoncpp 中全部对象、类名都在namespace Json 中,包括 json.h 就可以。
Json::Value 仅仅能处理 ANSI 类型的字符串,假设 C++ 程序是用 Unicode 编码的,最好加一个 Adapt类来适配。

具体应哟ing实例如下:

#include<iostream>
#include"json/json.h"
#include<assert.h>
using namespace std;
using namespace Json;

int main()
{
    //1、Value的使用
    Value json_temp;      // 暂时对象,供例如以下代码使用
    json_temp["name"] = Value("huchao");
    json_temp["age"] = Value(26);
    Value root;  // 表示整个 json 对象
    root["key_string"] = Value("value_string");  
    root["key_number"] = Value(12345);           
    root["key_boolean"] = Value(false);          
    root["key_double"] = Value(12.345);          
    root["key_object"] = json_temp;              
    root["key_array"].append("array_string");    
    root["key_array"].append(1234);              
    ValueType type = root.type();  
 
    cout << root["key_number"].asInt() << endl;
    cout << root["key_object"]["name"].asCString() << endl;
    cout << root["key_array"][(unsigned)0].asCString() << endl;
    cout << "type :" << type << endl << endl;
    
   //2、Writer的使用
    FastWriter fast_writer;
    cout << "Printf as FastWriter:" << endl;
    cout << fast_writer.write(root) << endl<<endl;
    StyledWriter styledwriter;
    cout << "Printf as StyledWriter:" << endl;
    cout << styledwriter.write(root) <<endl;

    //3、Reader的使用
    //(1)直接读取字符串char*
    Reader reader;
    Value json_object;
    const char* json_document = "{\"age\:26,\"name\":\"huchao\"}";   
    if(!reader.parse(json_document, json_object))
        return 0;
    cout << json_object["name"] <<endl;
    cout<<json_object["age"] <<endl;
    //(2)、读取json文件
    Reader reader1;
    Value json_object1;
    FILE* fp = fopen("test.json", "rb+");
    if(NULL == fp)
    {
        cout<<"fopen failed"<<endl;
        return -1;
    }

    fseek(fp, 0, SEEK_END);
    int length = ftell(fp);
    fseek(fp, 0, SEEK_SET); 
    char* buf = (char*)malloc(sizeof(char)*1024);
    memset(buf, 0, 1024);

    int ret = fread(buf, length, 1, fp);
    /*
        如果是:fread(buff, size, 1, fp)
        返回1表示读取到了size字节,返回0表示读取数量不足size字节
    */
    if(strlen(buf) == 0)
    {
          cout<<"file is empty"<<endl;
    }
    if(!reader1.parse(buf, json_object1))
    {
         cout<<"Convert failed"<<endl;
    }
    cout << json_object1["key_number"].asInit() << endl;
    cout << json_object1["ke_object"]["name"].asCString() << endl;
    system("pause");	
    return 0; 
}




猜你喜欢

转载自blog.csdn.net/a350611906/article/details/88927445