我的JSON文件类似于此
{
"active" : false,
"list1" : ["A", "B", "C"],
"objList" : [
{
"key1" : "value1",
"key2" : [ 0, 1 ]
}
]
}
现在使用nlohmann json,我已经设法存储它,当我进行转储jsonRootNode.dump()
时,内容被正确表示。
但是我找不到访问内容的方法。
我已尝试jsonRootNode["active"]
,jsonRootNode.get()
并使用json::iterator
,但仍无法弄清楚如何检索我的内容。
我正在尝试检索"active"
,来自"list1"
的数组和来自"objList"
的对象数组
答案 0 :(得分:5)
以下link解释了访问JSON中元素的方法。如果链接超出范围,则代码为
#include <json.hpp>
using namespace nlohmann;
int main()
{
// create JSON object
json object =
{
{"the good", "il buono"},
{"the bad", "il cativo"},
{"the ugly", "il brutto"}
};
// output element with key "the ugly"
std::cout << object.at("the ugly") << '\n';
// change element with key "the bad"
object.at("the bad") = "il cattivo";
// output changed array
std::cout << object << '\n';
// try to write at a nonexisting key
try
{
object.at("the fast") = "il rapido";
}
catch (std::out_of_range& e)
{
std::cout << "out of range: " << e.what() << '\n';
}
}
答案 1 :(得分:3)
万一其他人仍在寻找答案。您可以使用与写入nlohmann::json
对象相同的方法来访问内容。例如从中获取价值
问题中的json:
{
"active" : false,
"list1" : ["A", "B", "C"],
"objList" : [
{
"key1" : "value1",
"key2" : [ 0, 1 ]
}
]
}
只需:
nlohmann::json jsonData = nlohmann::json::parse(your_json);
std::cout << jsonData["active"] << std::endl; // returns boolean
std::cout << jsonData["list1"] << std::endl; // returns array
如果"objList"
只是一个对象,则可以通过以下方式检索其值:
std::cout << jsonData["objList"]["key1"] << std::endl; // returns string
std::cout << jsonData["objList"]["key2"] << std::endl; // returns array
但是由于"objList"
是键/值对的列表,因此要使用其值,请使用:
for(auto &array : jsonData["objList"]) {
std::cout << array["key1"] << std::endl; // returns string
std::cout << array["key2"] << std::endl; // returns array
}
考虑到"objList"
是大小为1的数组,循环仅运行一次。
希望它对某人有帮助
答案 2 :(得分:0)
我真的很喜欢在 C++ 中使用它:
for (auto& el : object["list1"].items())
{
std::cout << el.value() << '\n';
}
它将遍历数组。