如何访问 jsoncpp 值的键

How to access the key of a jsoncpp Value

我问这个问题有点傻,但一直没能找到获取 JSON 值的键的方法。如果我有对象的迭代器,我知道如何检索密钥。我也知道 operator[]。 在我的例子中,密钥不是已知值,因此不能使用 get(const char *key)operator[]。也找不到 getKey() 方法。

我的 JSON 看起来像这样:

{Obj_Array: [{"122":{"Member_Array":["241", "642"]}}]}

对于要解析的代码 {"122":{"Member_Array":["241", "642"]}} 我想使用类似于 get_key() 的函数来检索 "122" 但似乎我必须使用对我来说似乎的迭代器太过分了。

我可能根本不了解 jsoncpp 如何表示 JSON 文件。

首先,您拥有的内容不会在 JsonCPP 中解析。键必须始终用双引号引起来:

{"Obj_Array": [{"122":{"Member_Array":["241", "642"]}}]}

假设这只是一个疏忽,如果我们添加空格并标记元素:

{
root->  "Obj_Array" : [
  elem0->   {
    key0->    "122":
    val0->       {
      key0.1->      "Member_Array" :
        val0.1->    [
          elem0.1.0->  "241",
          elem0.1.1->  "642" ]
                  }
            }
       ]
}

假设您已成功将数据读入 Json::Value(我们称之为 root),每个标记值都可以像这样访问:

     elem0     = root[0];
     val0      = elem0["122"]
     val0_1    = val0["Member_Array"];
     elem0_1_0 = val0_1[0];
     elem0_1_1 = val0_1[1];

您注意到这只检索值;密钥是已知的 先验 。这并不罕见;键定义数​​据的模式;您必须了解它们才能直接访问这些值。

在您的问题中,您声明这不是一个选项,因为密钥是未知的。将语义应用于未知键可能具有挑战性,但您已经找到了答案。如果要获取键值,则必须遍历封闭 Json::Value.

的元素

因此,要达到 key0,您需要这样的东西(未经测试):

    elem0_members = elem0.getMemberNames();
    key0          = elem0_members[0];

无论如何,这不是制作质量,但我希望它指向正确的方向。