【fstream json c++基本操作】

本文介绍了如何使用C++的fstream库来读写文本和json文件,特别是针对json文件,通过jsoncpp库进行解析和修改,然后保存。讨论了定长和不定长修改文件时的文件指针问题,以及Json::Reader、Json::Value和Json::StreamWriter的使用方法。
摘要由CSDN通过智能技术生成

文章目录


一、JsonCpp的基本用法

JsonCpp的基本用法

二、ofstream和ifstream详细用法

ofstream和ifstream详细用法

三、fstream 修改文本文件、json文件

可以使用fstream来打开、读取和修改文本文件。首先使用ifstream对象打开要读取的文件,接着使用while循环逐行读取文件内容,将需要修改的行进行修改,最后使用ofstream对象将修改后的内容写回文件中。具体的实现方法可以参考C++的相关文档和教程。

1. 具体代码实现见我这篇博客,用string详细实现了文本文件中字符查找,修改。

2. 这是针对json文件进行的特殊操作。先把string解析成json,使用key查找到值后直接修改,完了保存。(包含里json紧凑型和标准型输出方式)

#include <iostream>
#include <fstream>
#include <string>
#include "json/json.h" 
using namespace std;
int main2(int argc, char** argv){
   
	const char* config_file = NULL;
	if (argc > 1){
   
		config_file = (const char*)argv[1];    // Get input json file
	}
	else{
   
		config_file = "config.json";   // If not specified, use the default file name
	}
	Json::Reader json_reader;
	Json::Value json_value;
	//二进制格式打开
	//ifstream infile(config_file, ios::binary);
	//文本文件打开
	ifstream infile(config_file, ios::in| ios::out);
	if (!infile.is_open())
	{
   
		cout << "Open config file failed!" << endl;
		return -1;
	}
	std::string json_file;

	//把文本文件解析成json格式
	if (json_reader.parse(infile, json_value))
	{
   
		//读json
		string name = json_value["name"].asString();  // 读取字符串型参数
		string sex = json_value["sex"].asString();
		int age = json_value["age"].asInt();   // 读取int型参数

		//写入参数
		json_value["age"] = 27;   // 读取int型参数

		//紧凑型格式
		//Json::FastWriter writer;//写文件
		//json_file = writer.write(json_value);

		//标准型格式
		Json::StyledWriter writer;//写文件
		json_file = writer.write(json_value);

		//读参数
		bool marriage = json_value["marriage"].asBool();   // 读取布尔型参数
		string university = json_value["education"]["university"].asString();  //读取嵌套类型
		string major = json_value["education"]["major"].asString();
		Json::Value courses = json_value["education"]["courses"];  // 读取值为Array的类型

		cout << "name = " << name << endl;
		cout << "sex = " << sex << endl;
		cout << "age = " << age << endl;
		cout << "marriage = " << marriage << endl;
		cout << "Education informatin: " << endl;
		cout << "  university: " << university << endl;
		cout << "  major: " << major << endl;
		cout << "  Courses:"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

【网络星空】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值