zoukankan      html  css  js  c++  java
  • C++操作Json字符串

    一、从字符串中读取JSON

    a.cpp

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <iostream>
     
    #include "json/json.h"
     
    using namespace std;
     
    int main()
    {
        //字符串
        const char* str = 
            "{"praenomen":"Gaius","nomen":"Julius","cognomen":"Caezar","
            ""born":-100,"died":-44}";
     
        Json::Reader reader;
        Json::Value root;
     
        //从字符串中读取数据
        if(reader.parse(str,root))
        {
            string praenomen = root["praenomen"].asString();
            string nomen = root["nomen"].asString();
            string cognomen = root["cognomen"].asString();
            int born = root["born"].asInt();
            int died = root["died"].asInt();
     
            cout << praenomen + " " + nomen + " " + cognomen
                << " was born in year " << born 
                << ", died in year " << died << endl;
        }
     
        return 0;
    }

    makefile文件

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    LIB=-L/usr/local/lib/libjson/ -ljson_linux-gcc-4.4.7_libmt
     
    a: a.o
        g++ -o a -std=c++0x a.o $(LIB)
    a.o: a.cpp 
        g++ -c a.cpp
    clean:
        rm -rf a.o a

    执行结果

    二、从文件里读取JSON

    PersonalInfo.json(一个存储了JSON格式字符串的文件)

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
        "name":"Tsybius",
        "age":23,
        "sex_is_male":true,
        "partner":
        {
            "partner_name":"Galatea",
            "partner_age":21,
            "partner_sex_is_male":false
        },
        "achievement":["ach1","ach2","ach3"]
    }

    a.cpp

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #include <iostream>
    #include <fstream>
     
    #include "json/json.h"
     
    using namespace std;
     
    int main()
    {
        Json::Reader reader;
        Json::Value root;
     
        //从文件里读取
        ifstream is;
        is.open("PersonalInfo.json", ios::binary);
     
        if(reader.parse(is,root))
        {
            //读取根节点信息
            string name = root["name"].asString();
            int age = root["age"].asInt();
            bool sex_is_male = root["sex_is_male"].asBool();
     
            cout << "My name is " << name << endl;
            cout << "I'm " << age << " years old" << endl;
            cout << "I'm a " << (sex_is_male ?

     "man" "woman") << endl;

     
            //读取子节点信息
            string partner_name = root["partner"]["partner_name"].asString();
            int partner_age = root["partner"]["partner_age"].asInt();
            bool partner_sex_is_male = root["partner"]["partner_sex_is_male"].asBool();
     
            cout << "My partner's name is " << partner_name << endl;
            cout << (partner_sex_is_male ? "he" "she") << " is "
                << partner_age << " years old" << endl;
     
            //读取数组信息
            cout << "Here's my achievements:" << endl;
            for(int i = 0; i < root["achievement"].size(); i++)
            {
                string ach = root["achievement"][i].asString();
                cout << ach << ' ';
            }
            cout << endl;
     
            cout << "Reading Complete!" << endl;
        }
     
        is.close();
     
        return 0;
    }

    makefile

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    LIB=-L/usr/local/lib/libjson/ -ljson_linux-gcc-4.4.7_libmt
     
    a: a.o
        g++ -o a -std=c++0x a.o $(LIB)
    a.o: a.cpp 
        g++ -c a.cpp
    clean:
        rm -rf a.o a

    执行结果

    三、将信息保存为JSON格式

    a.cpp

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <iostream>
    #include <fstream>
     
    #include "json/json.h"
     
    using namespace std;
     
    int main()
    {
        //根节点
        Json::Value root;
     
        //根节点属性
        root["name"] = Json::Value("Tsybius");
        root["age"] = Json::Value(23);
        root["sex_is_male"] = Json::Value(true);
     
        //子节点
        Json::Value partner;
     
        //子节点属性
        partner["partner_name"] = Json::Value("Galatea");
        partner["partner_age"] = Json::Value(21);
        partner["partner_sex_is_male"] = Json::Value(false);
     
        //子节点挂到根节点上
        root["partner"] = Json::Value(partner);
     
        //数组形式
        root["achievement"].append("ach1");
        root["achievement"].append("ach2");
        root["achievement"].append("ach3");
         
        //直接输出
        cout << "FastWriter:" << endl;
        Json::FastWriter fw;
        cout << fw.write(root) << endl << endl;
     
        //缩进输出
        cout << "StyledWriter:" << endl;
        Json::StyledWriter sw;
        cout << sw.write(root) << endl << endl;
         
        //输出到文件
        ofstream os;
        os.open("PersonalInfo");
        os << sw.write(root);
        os.close();
     
        return 0;
    }

    makefile

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    LIB=-L/usr/local/lib/libjson/ -ljson_linux-gcc-4.4.7_libmt
     
    a: a.o
        g++ -o a -std=c++0x a.o $(LIB)
    a.o: a.cpp 
        g++ -c a.cpp
    clean:
        rm -rf a.o a

    执行结果

    生成的文件PersonalInfo.json

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
       "achievement" : [ "ach1""ach2""ach3" ],
       "age" : 23,
       "name" "Tsybius",
       "partner" : {
          "partner_age" : 21,
          "partner_name" "Galatea",
          "partner_sex_is_male" false
       },
       "sex_is_male" true
    }

    END

  • 相关阅读:
    视频遮挡问题
    calc兼容性
    javascript变量声明提升
    jquery插件
    prop和attr在 jquery的
    onclick防止冒泡和json对象放入
    git 入门
    去掉ie滚动条兼容性
    单页面应用程序(SPA)
    swiper轮播图插件
  • 原文地址:https://www.cnblogs.com/llguanli/p/8458606.html
Copyright © 2011-2022 走看看