我正在尝试使用带有属性树的boost json来解码json消息。我只想检查消息中是否包含“mykey”,如果是这种情况,请获取相应的值。
我在boost文档中有些迷茫,我试图查看解析诸如以下消息之类的消息的实际代码。

{
    // some values
    "mykey": [
        {
            "var1": "value1_str",
            "var2" : "value2"
        }
    ]
    // some other values
}

最佳答案

我不知道Boost ptree for JSON。我已经尝试过了,但是看起来...很笨重。

这是一个基于RFC的简单JSON解析器,它是由Spirit制作的:https://github.com/sehe/spirit-v2-json/tree/q21356666

您可以将其用于test.cpp等用例

#include <vector>
#include "json.hpp"

struct X {
    static X from_json(JSON::Value const& v);

    std::string var1;
    double      var2;
};

int main()
{
    auto doc = as_object(JSON::parse(
        "{\n"
        "    // some values\n"
        "    \"mykey\": [\n"
        "        {\n"
        "            \"var1\": \"value1_str\",\n"
        "            \"var2\" : 3.14\n"
        "        }\n"
        "    ]\n"
        "    // some other values\n"
        "}\n"
        ));

    if (doc.has_key("mykey"))
    {
        X data = X::from_json(doc["mykey"]);
        std::cout << "X.var1: " << data.var1 << "\n";
        std::cout << "X.var2: " << data.var2 << "\n";
    }

    std::cout << "doc: " << doc << "\n";
    std::cout << "doc[\"mykey\"]: " << doc["mykey"] << "\n";
}

X X::from_json(JSON::Value const& v)
{
    X result;
    auto& o = as_object(as_array(v)[0]);
    result.var1 = as_string(o["var1"]);
    result.var2 = as_double(o["var2"]);

    return result;
}

输出:
X.var1: value1_str
X.var2: 3.14
doc: {"mykey":[{"var1":"value1_str","var2":3.14}]}
doc["mykey"]: [{"var1":"value1_str","var2":3.14}]

周围还有其他json库。我建议您选择一种适合您的需求。

07-24 09:37
查看更多