【问题标题】:JsonCpp - when having a json::Value object, how can i know it's key name?JsonCpp - 当有一个 json::Value 对象时,我怎么知道它的键名?
【发布时间】:2013-12-28 01:46:26
【问题描述】:

假设我有这个 Json 文件:

[
    {
        "id": 0
    }
]

使用 jsoncpp,我可以通过这样做拥有一个 Json::Value 对象:

Json::Value node = root[0u]["id"];

好的,在代码的其他地方,我得到了 node 对象,我想从中获取一些信息。我可以得到它的值,像这样:

int node_value = node.asInt();

但是我怎样才能得到它的名字呢? (即“id”)。它应该是这样的:

string node_name  = node.Name(); //or maybe:
string node_name2 = node.Key(); 

但我找不到类似的东西。帮助?如何获取节点名称?

【问题讨论】:

    标签: c++ json jsoncpp


    【解决方案1】:

    您可以使用 Json::Value::getMemberNames() 来遍历名称。

    Json::Value value;
    for (auto const& id : value.getMemberNames()) {
        std::cout << id << std::endl;
    }
    

    【讨论】:

    • 但这意味着我必须找到我拥有的 Value 对象的父级(这是我的另一个未回答的问题)。有没有办法到达 Value 对象的父级?
    • 据我所知,没有办法获得 Value 的父级;你为什么需要它?你的用例是什么?
    • 有人要求我为 jsoncpp 库编写一个包装器,并提供一种遍历 json 树的方法。我以为 jsoncpp 已经解决了这个问题,我只需要找出方法。
    【解决方案2】:

    您需要向上指针吗?这不是一个坏主意,但是为上指针添加一个字段会破坏二进制兼容性 (which is very important)。所以是的,你需要把它包装起来。

    目前,子值只是 Value,与其他任何值一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多