本博客主要记录基于C++语言json文件的读取,代码已在windows10平台visual studio2019运行,也在linux平台编译运行。
C语言读取json文件,仅在windows10上运行,未在linux运行(有点懒了)(添加:20221009)。
本代码链接:
链接:https://pan.baidu.com/s/1ujX19IUV0EPSIMyIcBnClA?pwd=r63z 提取码:r63z
名称:读取json(C++语言(windows与linux平台)C语言(windows平台)).zip 文件
说明:读取json代码无需下载其它库,可直接下载链接中的代码,即可运行。
一.C++ 读取json文件
json文件:
{
"age" : 21,
"name" : "shuiyixin",
"sex" : "man",
"friends" : {
"friend_age" : 21,
"friend_name" : "ZhaoWuxian",
"friend_sex" : "man"
},
"hobby" : [ "sing", "run", "Tai Chi" ]
}
主文件(Json).cpp
// Json.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include "json.h"
#include <fstream>
using namespace std;
void readFileJson(string json_root)
{
Json::Reader reader;
Json::Value root;
//从文件中读取,保证当前文件有demo.json文件
ifstream input(json_root, ios::binary);
if (!input.is_open())
{
cout << "Error opening file\n";
return;
}
if (reader.parse(input, root))
{
//读取根节点信息
string name = root["name"].asString();
int age = root["age"].asInt();
string sex = root["sex"].asString();
//读取子节点信息
string friend_name = root["friends"]["friend_name"].asString();
int friend_age = root["friends"]["friend_age"].asInt();
string friend_sex = root["friends"]["friend_sex"].asString();
//读取数组信息
string info="hoppy:\t[";
for (unsigned int i = 0; i < root["hobby"].size(); i++)
{
string ach = root["hobby"][i].asString();
info = info + ach + "," + "\t";
}
info = info + "]";
cout << "{\n age:" << age << ",\n name:" << name << ",\n sex:" << sex << ",\n friends:{\n" << "\tfriend_age:" << friend_age << ",\n\tfridend_name:" << friend_name <<
",\n\tfriend_sex:" << friend_sex << "\n\t},\n"<<info<<"\n}"<<endl;
}
input.close();
}
int main()
{
string json_root = "test.json";
readFileJson(json_root);
return 0;
}
CMakeLists.txt文件:
cmake_minimum_required(VERSION 2.6)
project(readjson)
add_definitions(-std=c++11)
include_directories(${PROJECT_SOURCE_DIR})
#link_directories(/usr/local/cuda/lib64) #连接库文件
add_executable(readjson ${PROJECT_SOURCE_DIR}/Json.cpp
${PROJECT_SOURCE_DIR}/jsoncpp.cpp
)
#target_link_libraries(yolo ${OpenCV_LIBS})
#target_link_libraries(yolo /home/ubuntu/soft/TensorRT-8.2.5.1/lib/stubs/libnvonnxparser.so)
代码链接文件格式:
linux平台代码运行结果:
二.C 读取json文件(添加:20221009)
json文件:
{
"server_ip":"192.168.100.104",
"server_port":"6666",
"rtsp_id":"0",
"rtsp_link":"rtsp://192.168.100.101:554",
"rtsp_user":"admin",
"rtsp_password":"ubuntu123456",
"rtsp_encodeType":"7",
"rtsp_buffersize":"8294400"
}
主文件(Json).c
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
#include "ReadJson.h"
/* Read a file, parse, render back, etc. */
char* dofile(char* filename)
{
FILE* f;
long length;
char* data;
f = fopen(filename, "rb");
fseek(f, 0, SEEK_END);
length = ftell(f);
fseek(f, 0, SEEK_SET);
data = (char*)malloc(length + 1);
fread(data, 1, length, f);
fclose(f);
//doit(data);
//parseJsonText(data);
//free(data);
return data;
}
char* process_variate(char* data,char* variate) {
char* out;
cJSON* json;
cJSON* childJson = NULL;
json = cJSON_Parse(data);
childJson = cJSON_GetObjectItem(json, variate);
char* result = childJson->valuestring;
return result;
}
int main(int argc, const char* argv[]) {
char* file_name = "parameters.json";
char* data;
char* variate;
data=dofile(file_name);
char* server_ip=process_variate( data, "server_ip");
char* server_port_temp = process_variate(data, "server_port");
int server_port = atoi(server_port_temp);
char* rtsp_id_temp = process_variate(data, "rtsp_id");
int rtsp_id = atoi(rtsp_id_temp);
char* rtsp_link = process_variate(data, "rtsp_link");
char* rtsp_user = process_variate(data, "rtsp_user");
char* rtsp_password = process_variate(data, "rtsp_password");
char* rtsp_encodeType_temp = process_variate(data, "rtsp_encodeType");
int rtsp_encodeType = atoi(rtsp_encodeType_temp);
char* rtsp_buffersize_temp = process_variate(data, "rtsp_buffersize");
int rtsp_buffersize = atoi(rtsp_buffersize_temp);
free(data);
return 0;
}
结果: