菜鸟笔记
提升您的技术认知

c 读写json文件及jsoncpp配置详解-ag真人游戏

目录

前言

一、json文件简介

1、json文件

2、json与其他存储数据方式比较

二、c 操作json文件

1、jsoncpp 库下载

2、c 从字符串中读取json

3、c 从文件中读取json

4、c 写入json文件

5、主函数

 附:jsoncpp库配置

1、解压并转移

2、配置属性

3、配置项目

json文件是比较轻量级的文件,格式简单,使用方便。用来存放信息相比其他方式有自己得天独厚的优势。

今天给大家分享的是如何利用c 来操作json文件。

如果你知道如何使用jsoncpp类库,可以不用看附,如果第一次使用,请先到最后,将环境配置好,再进行操作。 

1、json文件

json(javascript object notation, js 对象简谱) 是一种轻量级的数据交换格式。它基于 ecmascript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 json 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

2、json与其他存储数据方式比较

为什么要用json文件呢?

我们最常使用的存储数据的方式有很多,比如利用txt文件存,利用xml存,利用word存,利用excel存,如果我们要求比较高,还可以使用数据库存。

相对于txt,word来说,json格式更加明确,获取重要信息非常方便。

相对于xml来说,json格式更加简洁,存储同样的文件,花费的内存更小。

相对于excel来说,json更适合存储字符类文件。excel相当于比较简单的数据库了。

相对于数据库来说,json更加方便,数据库我们还需要做一些设置,安装一些软件。json可以直接使用。

1、jsoncpp 库下载

大家可以自己上网下载jsoncpp 库

2、c 从字符串中读取json

json样式比较多,这里分享两种,一种比较直接简单的,一种稍微有些复杂的。

1.简单json样式

我们定义一个字符串来保存如下json数据:

{
    "name" : "shuiyixin",
    "age" : "21",
    "sex" : "man"
}

读取代码如下:

void readstrjson()
{
    //字符串  
    const char* str =
        "{\"name\":\"shuiyixin\",\"age\":\"21\",\"sex\":\"man\"}";
    json::reader reader;
    json::value root;
    //从字符串中读取数据  
    if (reader.parse(str, root))
    {
        string name = root["name"].asstring();
        int age = root["nomen"].asint();
        string sex = root["sex"].asstring();
        cout << name   "," << age << "," << sex <<  endl;
    }
}

2.复杂json样式

所谓复杂,就是说,json里面分好几层,上面那个简单的只有一层,json数据如下:

{
    "name":"shuiyixin",
    "major":[
    {
        "ai":"machinelearning"
    },
    {
        "ai":"deeplearning"
    },
    {
        "ai":"computervision"
    }]
}

读取代码如下:

void readstrprojson()
{
    string strvalue = "{\"name\":\"shuiyixin\",\"major\":[{\"ai\":\"machinelearning\"},{\"ai\":\"deeplearning\"},{\"ai\":\"computervision\"}]}";
    json::reader reader;
    json::value value;
    if (reader.parse(strvalue, value))
    {
        string out = value["name"].asstring();
        cout << out << endl;
        const json::value arrayobj = value["major"];
        for (unsigned int i = 0; i < arrayobj.size(); i  )
        {
            out = arrayobj[i]["ai"].asstring();
            cout << out<

 

3、c 从文件中读取json

从字符串中读取json文件只是为了让大家能够了解json文件,我们最终还是要从文件中读取的。

这个读取的json文件,大家可以通过下面的写json文件自己创建一个。

以下面这个json文件为例:

{
   "age" : 21,
   "friends" : {
      "friend_age" : 21,
      "friend_name" : "zhaowuxian",
      "friend_sex" : "man"
   },
   "hobby" : [ "sing", "run", "tai chi" ],
   "name" : "shuiyixin",
   "sex" : "man"
}

读取代码如下:

void readfilejson()
{
    json::reader reader;
    json::value root;
    //从文件中读取,保证当前文件有demo.json文件  
    ifstream in("demo.json", ios::binary);
    if (!in.is_open())
    {
        cout << "error opening file\n";
        return;
    }
    if (reader.parse(in, root))
    {
        //读取根节点信息  
        string name = root["name"].asstring();
        int age = root["age"].asint();
        string sex = root["sex"].asstring();
        cout << "my name is " << name << endl;
        cout << "i'm " << age << " years old" << endl;
        cout << "i'm a " << sex << endl;
        //读取子节点信息  
        string friend_name = root["friends"]["friend_name"].asstring();
        int friend_age = root["friends"]["friend_age"].asint();
        string friend_sex = root["friends"]["friend_sex"].asstring();
        cout << "my friend's name is " << friend_name << endl;
        cout << "my friend's sex is "<

4、c 写入json文件

除了读,我们经常还会写入json文件,json文件如下:

{
   "age" : 21,
   "friends" : {
      "friend_age" : 21,
      "friend_name" : "zhaowuxian",
      "friend_sex" : "man"
   },
   "hobby" : [ "sing", "run", "tai chi" ],
   "name" : "shuiyixin",
   "sex" : "man"
}

写入代码如下:

void writefilejson()
{
    //根节点  
    json::value root;
    //根节点属性  
    root["name"] = json::value("shuiyixin");
    root["age"] = json::value(21);
    root["sex"] = json::value("man");
    //子节点  
    json::value friends;
    //子节点属性  
    friends["friend_name"] = json::value("zhaowuxian");
    friends["friend_age"] = json::value(21);
    friends["friend_sex"] = json::value("man");
    //子节点挂到根节点上  
    root["friends"] = json::value(friends);
    //数组形式  
    root["hobby"].append("sing");
    root["hobby"].append("run");
    root["hobby"].append("tai chi");
    //直接输出  
    //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("demo.json", std::ios::out | std::ios::app);
    if (!os.is_open())
        cout << "error:can not find or create the file which named \" demo.json\"." << endl;
    os << sw.write(root);
    os.close();
}

要注意的是:

1.如果要写入的文件不存在,会自动创建该文件;

2.如果文件存在,写入过程不会覆盖文件中原有数据,而是将新数据写在原有数据后面。

5、主函数

所有的功能模块都写好啦,剩下就是主函数啦:

#include   
#include 
#include   
#include   
using namespace std;
void readstrjson(); //从字符串中读取json  
void readstrprojson(); //从字符串中读取json(内容复杂些)  
void readfilejson(); //从文件中读取json 
void writefilejson();  //将信息保存为json格式  
int main(int argc, char *argv[])
{
    writefilejson(); //写入json
    readfilejson(); //从文件中读取json 
    cout << "\n\n";
    readstrjson();  //从字符串中读json
    cout << "\n\n";
    readstrprojson();//从字符串中读取json(内容复杂些)  
    
    system("pause");
    return 0;
}

1、解压并转移

首先将库解压,将下面的两个文件夹复制到你创建的项目下面

将库解压
将两个文件夹复制到自己创建的项目中

2、配置属性

点击调试,并点击项目属性

点击调试->项目属性
选择vc 目录中的包含目录,点击修改
将includ文件夹下的json文件路径复制到这里,并保存

3、配置项目

将src文件夹下的lib_json文件夹下的cpp文件,添加到源文件中:

找到src文件夹->lib_json文件夹->所有cpp文件,并复制

 

添加到源文件中

然后就可以使用啦。

<

p style="text-indent:50px"> 

网站地图