C++ nlohmann/json 如何使用运行时提供的 json_pointers 来读取 json 值

Posted

技术标签:

【中文标题】C++ nlohmann/json 如何使用运行时提供的 json_pointers 来读取 json 值【英文标题】:C++ nlohmann/json how to use runtime provided json_pointers to read json values 【发布时间】:2016-06-27 23:04:51 【问题描述】:

我正在使用现代 C++ (https://github.com/nlohmann/json) 的 json 解析器 Json。我知道我可以使用 JSON_Pointer 获取 JSON 值的值:

auto v1 = j["/a/b/c"_json_pointer];

但是,如果 JSON 指针是在运行时定义的(传递到我的函数中),我将如何获取值?

std:string s1 = "/a/b/c";
auto v1 = j[s1]; // doesn't work

您不能将“json_pointer”附加到 std::string 赋值或 s1 变量。是否有将 std::string 转换为 json_pointer 的函数?调用者对 json 一无所知,无法访问“json.hpp”标头。我也试过了

std::string s1 = "/a/b/c";
json_pointer p1(s1);

但是“json_pointer”类是未定义的。除了这个问题,这是一个很棒的库,可以做我需要的一切。 TIA。

【问题讨论】:

【参考方案1】:

看源码:

inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t)

    return nlohmann::json::json_pointer(s);

如果 json_pointer 未定义,那么您没有使用正确的命名空间。试试

using nlohmann::json::json_pointer;
std::string s1 = "/a/b/c";
json_pointer p1(s1);

【讨论】:

我发誓这是我尝试的第一件事,但不会编译。刚刚再试一次,它就像一个魅力。感谢您的快速和非评判性的回应。 没问题。下次尝试构建一个MCVE。当我遇到问题时,有一半的时间我只是通过首先构建一个来解决它。

以上是关于C++ nlohmann/json 如何使用运行时提供的 json_pointers 来读取 json 值的主要内容,如果未能解决你的问题,请参考以下文章

[C++][原创]nlohman的json简单使用

nlohmann json for modern C++

C++ nlohmann/json 的主要用法

最好用的json库,也许是JSON for modern C++ 的最佳实践!解决nlohmann json中文无法解析的问题!

c++11:nlohmann::json进阶使用ordered_json

c++11:nlohmann::json进阶使用使用basic_json模板类