问题复现

请求到的json中字段中有冗余字段,是无用信息,在用C++进行解析时,将其转变为unordered_map<string, string>可较完美且符合人类逻辑的进行json字符串的解析,并可对特定字段进行剔除,不过由于C++是强类型,静态的语言,暂未想到有比用string字面量表示所有数据类型更完美的方案。

代码实现

导入json文件

#include <fstream>

using std::string;
using std::ifstream;

string readFile(ifstream& buffer, size_t reserve_size = 0) {
string json;
if (reserve_size) { //预留足够空间来避免多次扩容引起的性能问题
json.reserve(reserve_size);
}
if (buffer.is_open()) { //文件是否打开
string line;
while (getline(buffer, line)) {
line.append("\n");
json.append(line);
}
}
return json;
}

解析json

#include <unordered_map>

using std::unordered_map;

unordered_map<string, string> parseJson(const string& s) {
unordered_map<string, string> json;
auto it = s.begin();
while (*it != '{') {
it++;
}
while (*it != '}') {
while (*it != '\"') {
it++;
}
auto key_begin = ++it;
while (*it != '\"') {
it++;
}
auto key_end = it++;
string key(key_begin, key_end);

while (*it != ':') {
it++;
}
while (*it != ' ') {
it++;
}
auto value_begin = ++it;
while (*it != '\n') {
it++;
}
auto value_end = it++-1;
string value(value_begin, value_end);

json[key] = value;
}
return json;
}

main

#include <iostream>

int main() {
std::ifstream buffer(R"(../../..)"); //json文件路径
std::string s(readFile(buffer, 40000));
std::unordered_map<string, string> json = parseJson(s);
buffer.close();
for (const auto& it : json) {
std::cout << it.first << ": " << it.second << '\n';
}
}