以下是一个简单的C++ JSON解析器的示例代码:
#include
#include
#include
enum class JSONValueType {
OBJECT,
ARRAY,
STRING,
NUMBER,
BOOL,
NULL_VALUE
};
struct JSONValue {
JSONValueType type;
std::string key;
std::string value;
std::vector children;
};
class JSONParser {
public:
JSONValue parse(const std::string& json) {
index = 0;
return parseValue(json);
}
private:
JSONValue parseValue(const std::string& json) {
skipWhitespace(json);
char currentChar = json[index];
if (currentChar == '{') {
return parseObject(json);
} else if (currentChar == '[') {
return parseArray(json);
} else if (currentChar == '"') {
return parseString(json);
} else if (currentChar == 't' || currentChar == 'f') {
return parseBool(json);
} else if (currentChar == 'n') {
return parseNull(json);
} else {
return parseNumber(json);
}
}
JSONValue parseObject(const std::string& json) {
JSONValue value;
value.type = JSONValueType::OBJECT;
index++; // Skip '{'
while (json[index] != '}') {
JSONValue child = parseValue(json);
value.children.push_back(child);
if (json[index] == ',') {
index++; // Skip ','
}
}
index++; // Skip '}'
return value;
}
JSONValue parseArray(const std::string& json) {
JSONValue value;
value.type = JSONValueType::ARRAY;
index++; // Skip '['
while (json[index] != ']') {
JSONValue child = parseValue(json);
value.children.push_back(child);
if (json[index] == ',') {
index++; // Skip ','
}
}
index++; // Skip ']'
return value;
}
JSONValue parseString(const std::string& json) {
JSONValue value;
value.type = JSONValueType::STRING;
index++; // Skip '"'
std::string stringValue;
while (json[index] != '"') {
stringValue += json[index++];
}
index++; // Skip '"'
value.value = stringValue;
return value;
}
JSONValue parseBool(const std::string& json) {
JSONValue value;
value.type = JSONValueType::BOOL;
if (json[index] == 't') {
value.value = "true";
index += 4; // Skip "true"
} else {
value.value = "false";
index += 5; // Skip "false"
}
return value;
}
JSONValue parseNull(const std::string& json) {
JSONValue value;
value.type = JSONValueType::NULL_VALUE;
value.value = "null";
index += 4; // Skip "null"
return value;
}
JSONValue parseNumber(const std::string& json) {
JSONValue value;
value.type = JSONValueType::NUMBER;
std::string numberString;
while (isdigit(json[index]) || json[index] == '.') {
numberString += json[index++];
}
value.value = numberString;
return value;
}
void skipWhitespace(const std::string& json) {
while (isspace(json[index])) {
index++;
}
}
int index;
};
int main() {
std::string json = R"({"name": "John", "age": 30, "isStudent": true, "grades": [90, 85, 95]})";
JSONParser parser;
JSONValue value = parser.parse(json);
std::cout << "Parsed JSON:" << std::endl;
std::cout << "Type: " << static_cast(value.type) << std::endl;
std::cout << "Key: " << value.key << std::endl;
std::cout << "Value: " << value.value << std::endl;
std::cout << "Children:" << std::endl;
for (const JSONValue& child : value.children) {
std::cout << "Type: " << static_cast(child.type) << std::endl;
std::cout << "Key: " << child.key << std::endl;
std::cout << "Value: " << child.value << std::endl;
}
return 0;
}
该示例代码实现了一个简