尝试在不使用C ++中的外部库或模块的情况下读取和写入JSON文件

时间:2018-01-19 07:21:55

标签: c++ json

我想在不使用外部库或模块的情况下读取JSON文件。当我试图以简单的方式(比如读/写.txt文件)这样做时,它不会从文件中读取任何内容。我想逐行读取它作为字符串,make一些变化并替换线。 (或者只是写入一个新的JSON文件并使用它。)

我想要做的是用一个简单的连字符替换所有char的实例("≠")(" - ")

我尝试过:

fs.open ("/Users/aditimalladi/CLionProjects/file/JSON_FILE");
string str;
while(getline(fs,str))
{       
    size_t index = 0;

while(true) {

    index = str.find("≠", index);
    if (index == std::string::npos) break;
    str.replace(index, 3, "-");
    index += 1;

}

我该怎么做呢?我知道jsoncpp和其他类似的模块更容易。但我想没有这样做。

在上面的代码中,正在读取整个文件,并且不会替换该字符。

1 个答案:

答案 0 :(得分:2)

尝试将代码调整为(需要C ++ 11):

fs.open ("/Users/aditimalladi/CLionProjects/file/JSON_FILE");
string str;
while(getline(fs,str))
{       
    size_t index = 0;

while(true) {

    index = str.find(u8"≠", index);
    if (index == std::string::npos) break;
    str.replace(index, 3, 1, '-');
    index += 1;

}

要保持源代码以ascii编码,请尝试:

fs.open ("/Users/aditimalladi/CLionProjects/file/JSON_FILE");
string str;
while(getline(fs,str))
{       
    size_t index = 0;

while(true) {

    index = str.find(u8"\u2260", index);
    if (index == std::string::npos) break;
    str.replace(index, 3, 1, '-');
    index += 1;

}

或者对于没有u8的前C ++ 11或stdlibs - 带前缀的文字:

fs.open ("/Users/aditimalladi/CLionProjects/file/JSON_FILE");
string str;
while(getline(fs,str))
{       
    size_t index = 0;

while(true) {

    index = str.find("\xE2\x89\xA0", index);
    if (index == std::string::npos) break;
    str.replace(index, 3, 1, '-');
    index += 1;

}