• jsoncpp学习


    // MyJsonTest.cpp : 定义控制台应用程序的入口点。
    //
     
    #include "stdafx.h"
    #include <fstream>
    #include <cassert>
    #include "json/json.h"
     
    using namespace std;
    /**************************************************************
    技术博客
    http://www.cnblogs.com/itdef/
        
    技术交流群
    群号码:324164944
        
    欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
    **************************************************************/
      
    void test1() {
        Json::Value root;
        Json::FastWriter writer;
        Json::Value person;
     
        person["FileName"] = "test1";
        person["fileLength"] = "1987655325452"; // 4G以内文件
        person.removeMember("fileLength");
        root.append(person);
        person["FileName"] = "test2";
        person["fileLength"] = "1987655325452"; // 4G以内文件
        root.append(person);
        person["FileName"] = "test3";
        person["fileLength"] = "1987655325452"; // 4G以内文件
        root.append(person);
     
        std::string json_file = writer.write(root);
     
        ofstream ofs;
        ofs.open("test1.json", ios::trunc);
        assert(ofs.is_open());
        ofs << json_file;
        ofs.close();
    }
     
    int test2() {
        Json::Reader pJsonParser;;
        string strJson = "{\"name\":\"tom\",\"sex\":\"男\",\"age\":\"24\",\"friends\":[{\"name\":\"chen\",\"sex\":\"男\"},{\"name\":\"li\",\"sex\":\"女\"}]}";
        Json::Value tempVal;
     
        if (!pJsonParser.parse(strJson, tempVal))
        {
            cout << "parse error" << endl;
            return -1;
        }
     
        string name = tempVal["name"].asString();
        string sex = tempVal["sex"].asString();
        string age = tempVal["age"].asString();
     
        Json::Value friends = tempVal["friends"];
        for (int i = 0; i < friends.size(); i++) {
            cout << friends[i]["name"].asString() << endl;
        }
        cout << "name = " << name << "    age = " << age << "    sex = " << sex  << endl;
     
        return 0;
    }
     
    void test3() {
            Json::Value root;
            Json::Value arrayObj;
            Json::Value item;
            Json::FastWriter writer;
            for (int i = 0; i<10; i++)
            {
                item["key"] = i;
                arrayObj.append(item); //数组项添加
            }
            root["key1"] = "value1";
            root["key2"] = "value2";
            root["key3"] = 0x100;
            root["key4"] = true;
            root["key5"] = "中国人";
            item = root["key5"];
            root["array"] = arrayObj;
            std::cout << root.toStyledString();
            std::cout << writer.write(root);
    }
     
     
    void test4() {
        char* config_doc = "{\"encoding\" : \"UTF-8\",\"plug-ins\" : [\"python\",\"c++\",\"ruby\"],\"indent\" : { \"length\" : 3, \"use_space\" : true }}";
     
        Json::Value root;   // will contains the root value after parsing.
        Json::Reader reader;
        bool parsingSuccessful = reader.parse(config_doc, root);
        if (!parsingSuccessful)
        {
            // report to the user the failure and their locations in the document.
            std::cout << "Failed to parse configuration\n";
            return;
        }
     
        // Get the value of the member of root named 'encoding', return 'UTF-8' if there is no
        // such member.
        std::string encoding = root.get("encoding", "UTF-8").asString();
        // Get the value of the member of root named 'encoding', return a 'null' value if
        // there is no such member.
        const Json::Value plugins = root["plug-ins"];
        for (int index = 0; index < plugins.size(); ++index)  // Iterates over the sequence elements.
            std::cout << plugins[index].asString() << std::endl;
     
        std::cout << root["indent"].get("length", 3).asInt() << std::endl;
     
        std::cout << root["indent"].get("use_space", true).asBool() << std::endl;;
     
        // ...
        // At application shutdown to make the new configuration document:
        // Since Json::Value has implicit constructor for all value types, it is not
        // necessary to explicitly construct the Json::Value object:
        //root["encoding"] = getCurrentEncoding();
        //root["indent"]["length"] = getCurrentIndentLength();
        //root["indent"]["use_space"] = getCurrentIndentUseSpace();
     
        Json::StyledWriter writer;
        // Make a new JSON document for the configuration. Preserve original comments.
        std::string outputConfig = writer.write(root);
     
        // You can also use streams.  This will put the contents of any JSON
        // stream at a particular sub-value, if you'd like.
        //std::cin >> root["subtree"];
     
        // And you can write to a stream, using the StyledWriter automatically.
        std::cout << root;
    }
     
    void test5() {
        Json::Reader reader;
        Json::Value root;
        Json::StyledStreamWriter writer;
        std::string text = "{ \"first\": \"James\", \"last\": \"Bond\", \"nums\": [0, 0, 7] }";
        std::ofstream outFile;
     
        // Parse JSON and print errors if needed
        if (!reader.parse(text, root)) {
            std::cout << reader.getFormatedErrorMessages();
            exit(1);
        }
        else {
     
            // Read and modify the json data
            std::cout << "Size: " << root.size() << std::endl;
            std::cout << "Contains nums? " << root.isMember("nums") << std::endl;
            root["first"] = "Jimmy";
            root["middle"] = "Danger";
     
            // Write the output to a file
            outFile.open("output.json");
            writer.write(outFile, root);
            outFile.close();
        }
    }
     
     
    int main()
    {
        test5();
     
     
        return 0;
    }
    View Code

    考虑在打包时候使用json记录打包文件信息
    但是json似乎不支持64位数据 那么大于4G的文件长度怎么记录?这是个问题

    代码见

    http://www.oschina.net/code/snippet_614253_56645

  • 相关阅读:
    C++_学习随笔_牛郎织女迷宫
    UE4复习5_蓝图接口简单应用
    UE4复习4_射线检测
    今日份学习: Spring中使用AOP并实现redis缓存?
    动态代理,AOP和Spring
    今日份学习:初步的springboot
    HTML常用标签
    关于类的笔记
    关于编码的一个笔记
    Java Socket例程3 UDP
  • 原文地址:https://www.cnblogs.com/itdef/p/5542082.html
Copyright © 2020-2023  润新知