如何使用nlohmann json从字符串中获取值类型?

3

我得到的字符串

{
    "players": [
        {
            "SteamId": "765611974898245625",
            "CommunityBanned": false,
            "VACBanned": true,
            "NumberOfVACBans": 1,
            "DaysSinceLastBan": 1011,
            "NumberOfGameBans": 1,
            "EconomyBan": "none"
        }
    ]
}

我需要从中获取信息

bool VACBanned = true;
int NumberOfVACBans = 1;

等等其他内容

我使用nlohmann json

using json = nlohmann::json;
auto j3 = json::parse(respone.c_str());

if (j3.is_boolean()) // crashing without this check
    g_Player[index].bVACBanned = j3.at("VACBanned").get<bool>();

由于某些原因,它不能正常工作。


如果您不介意的话,我已经移除了 visual c++ 标签,并添加了通用的 c++json 标签。 - Vlad Feinstein
j3.is_boolean()不应该是false吗?因为j3应该是一个包含名为players的数组的对象。 - Kevin
@Kevin - 当然,这就是为什么那个错误的语句被绕过并且没有崩溃的原因 :) - Vlad Feinstein
你想获取哪个玩家的信息? - Asteroids With Wings
1个回答

2

我以前没有使用过这个解析器,只读了它的 readme.md。看起来这两种方法都可以:

bool b1 = j3.at("players")[0].at("VACBanned");
bool b2 = j3["players"][0]["CommunityBanned"];

你的JSON有一个根节点players,它是一个数组;它的第一个元素可以通过[0]访问;从那里,你可以访问所有解析出来的元素。
根据你的容错级别添加错误检查 :)
附注:这只是一个语法演示;我假设OP可以获取已解析数组的大小,并迭代它以获取每个球员的详细信息。
另外,为了回答你的“因为某种原因它不起作用”的问题:
g_Player[index].bVACBanned = j3.at("VACBanned").get<bool>();

j3没有元素"VACBanned",所以at("VACBanned")很可能返回nullptr,你对其进行了解引用操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接