请使用 c++ 递归 {a:[{'123':'666'}],b:{ab:['123','1234']},c:'123'}
时间: 2023-09-30 20:06:10 浏览: 173
好的,我明白了您的问题。您想要使用C++递归来遍历给定的JSON数据结构,并打印出所有键值对对应的值。以下是一个示例代码:
```cpp
#include <iostream>
#include <map>
#include <vector>
void printJsonValue(const std::string& key, const std::string& value) {
std::cout << key << ": " << value << std::endl;
}
void recursiveJsonPrint(const std::map<std::string, std::variant<std::string, std::vector<std::map<std::string, std::string>>>>& json) {
for (const auto& pair : json) {
if (std::holds_alternative<std::string>(pair.second)) {
printJsonValue(pair.first, std::get<std::string>(pair.second));
}
else if (std::holds_alternative<std::vector<std::map<std::string, std::string>>>(pair.second)) {
for (const auto& nestedMap : std::get<std::vector<std::map<std::string, std::string>>>(pair.second)) {
recursiveJsonPrint(nestedMap);
}
}
}
}
int main() {
std::map<std::string, std::variant<std::string, std::vector<std::map<std::string, std::string>>>> json = {
{"a", {{"123", "666"}}},
{"b", { {{"ab", {"123", "1234"}}} }},
{"c", "123"}
};
recursiveJsonPrint(json);
return 0;
}
```
在这个示例中,我们定义了一个递归函数`recursiveJsonPrint`来遍历JSON数据结构。该函数接受一个`std::map`类型的参数,其中键为字符串,值为`std::variant`类型,可以是字符串或者包含了更深层次的`std::map`的`std::vector`。我们使用`std::holds_alternative`来检查值的类型,并根据其类型进行相应的处理。
请注意,这只是一个简单的示例,仅支持特定的JSON结构。如果JSON结构更加复杂,可能需要进行更多的类型检查和处理。
阅读全文