问题复现
请求到的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"(../../..)"); 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'; } }
|