【问题标题】:How to access the key of a jsoncpp Value如何访问 jsoncpp 值的键
【发布时间】:2021-04-16 20:17:15
【问题描述】:

我觉得问这个有点愚蠢,但一直无法找到一种方法来获取 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 文件。

【问题讨论】:

    标签: json jsoncpp


    【解决方案1】:

    首先,您不会在 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];
    

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

    【讨论】:

    • 非常感谢。我最终迭代了你提到的元素。但是您的回答非常有用且内容丰富。欣赏它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2021-05-07
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多