c++使用jsoncpp读取json文件

准备

  1. Visual studio 2019
  2. jsoncpp 1.8.4
  3. c++语言

代码

#include <iostream>
#include <fstream>
#include<algorithm>
#include<string>
#include <atlstr.h>
#include <assert.h>
#include "json/json.h"

//链接,放在源码相同文件夹下
#pragma comment(lib,"json_vc71_libmtd.lib")

std:: string UTF8ToGB(const char* str)
{

    //UTF-8转换GB
    //UTF8ToGB(data[i][j].asString().data())  string转char *str
    std::string result;
    WCHAR* strSrc;
    LPSTR szRes;

    int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
    strSrc = new WCHAR[i + 1];
    MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);

    i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
    szRes = new CHAR[i + 1];
    WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);

    result = szRes;
    delete[]strSrc;
    delete[]szRes;
    return result;
}

void ReadJsonFromFile(const char* file)
{
    std::string line, jsonStr;
    std::ifstream ifs(file);

    assert(ifs.is_open());

    while (getline(ifs, line))
    {
        jsonStr.append(line);
    }
    ifs.close();

    bool res;
    JSONCPP_STRING errs;
    Json::Value root, rows, data;

    Json::CharReaderBuilder readerBuilder;
    std::unique_ptr<Json::CharReader> const jsonReader(readerBuilder.newCharReader());
    res = jsonReader->parse(jsonStr.c_str(), jsonStr.c_str() + jsonStr.length(), &root, &errs);
    if (!res || !errs.empty())
    {
        std::cout << "ReadJsonFromString error! " << errs << std::endl;
    }

    std::cout << "root.size() = " << root.size() << std::endl;

    data = root["data"];
    std::cout << "data: \n"<<data<<std::endl;
    std::cout << data[0].size() << std::endl;
    std::cout << data[0][0]<< std::endl;
    std::cout << UTF8ToGB(data[0][0].asString().data()) << std::endl;
}

int main()
{
    std::string jsonStr;
    ReadJsonFromFile("FaceFeature.json");
    return 0;
}

测试json文件

{
  "code": 0,
  "msg": "",
  "count": 2,
  "data": [
    [
      "154 工单",
      "Doe",
      "13585486456",
      "center",
      "aa",
      "aa",
      "aa",
      "aa"
    ],
    {
      "id": "154",
      "username": "oe",
      "city": "13585456",
      "sign": "ceter",
      "classify": "a",
      "experience": "a",
      "score": "a",
      "wealth": "a"
    }
  ]
}

文件结构

在这里插入图片描述

结果详情

在这里插入图片描述

中文处理

来源博客:
jsoncpp处理中文乱码
其他资源:
源码以及jsoncpp文件包

要在C++使用JsonCpp库来读取JSON文件,你可以按照以下步骤进行操作: 1. 首先,确保已经下载并安装了JsonCpp库,并将其包含在你的项目中。 2. 创建一个Json::Value对象来存储解析后的JSON数据。 3. 使用Json::Reader对象来读取JSON文件并解析为Json::Value对象。 下面是一个简单的示例代码,演示了如何使用JsonCpp读取JSON文件: ```cpp #include <iostream> #include <fstream> #include <json/json.h> int main() { // 读取 JSON 文件 std::ifstream jsonFile("example.json"); if (!jsonFile.is_open()) { std::cout << "Failed to open JSON file." << std::endl; return 1; } // 解析 JSON 数据 Json::Value root; Json::Reader reader; if (!reader.parse(jsonFile, root)) { std::cout << "Failed to parse JSON data." << std::endl; return 1; } // 读取 JSON 数据并输出 std::string name = root["name"].asString(); int age = root["age"].asInt(); std::string city = root["city"].asString(); std::cout << "Name: " << name << std::endl; std::cout << "Age: " << age << std::endl; std::cout << "City: " << city << std::endl; return 0; } ``` 在上面的示例中,我们首先打开了一个名为`example.json`的JSON文件,然后使用JsonCppJson::Reader对象解析JSON数据,并将其存储在名为`root`的Json::Value对象中。接下来,我们通过访问`root`对象的键值对来获取JSON数据,并将其输出到控制台上。 请确保将示例代码中的`example.json`替换为你实际使用JSON文件的路径。 这里提供一个CSDN上的相关教程供参考:[https://blog.csdn.net/qq_41453285/article/details/105808014](https://blog.csdn.net/qq_41453285/article/details/105808014)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能视界探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值