C++中Json的用法(下)

来源:互联网 发布:大淘客cms建站教程 编辑:程序博客网 时间:2024/06/05 03:11

上一篇咱们写了,发送请求时,怎么去拼装Json串,那么相对的,客户端发过来的Json串,怎么去解析,这也是同样重要的。接下来咱们就看看该怎么解析Json。其实相当于拼装Json的逆运算。

同样的,在解析Json时,也会用到上一篇中提到的lib_json.lib这个库。

对于简单的Json,可以直接进行解析,如:

{
    "status": "failed!",
    "reason": "failed: request parameters is empty."
}

首先应该先建立一个Json::Reader reader;// 这个地方我理解为解析对象,也就是创建一个解析者
Json::Value valueRoot;// 在建立一个根节点
reader.parse(strResponseData, valueRoot);// 对其进行解析,将解析到valueRoot里面。接下来就是对valueRoot的解析:

valueRoot["errorCode"].asString();这样就是对字符串类型的取值,同样的有asInt(),asBool()等等。取出来的值就是自己想要的了(特殊编码方式需要做相应转换哦~)。

对于略复杂的Json结构:

 {
    "addResourceListResponse": [
        {
            "id": "911BCDCA-B272-4F52-B1F0-E476037716C6",
            "success": false,
            "description": "Parameter error: Can't not find object in DB!"
        }
    ]
}

这种结构需要顶一个“中间变量”:Json::Value valueQueryResults = valueRoot["addResourceListResponse"];然后再对valueQueryResults进行解析。另外因为valueQueryResults是个数组,所以需要对他的每个元素都进行取值,因此可以写个循环~

for (int i=0; i<valueQueryResults.size(); ++i)
{
Json::Value valueQueryResult = valueQueryResults[i];
if (valueQueryResult["success"].asBool())
{
DEBUGOUTPUT_NORMAL_STATUS(_T("服务端返回成功!"));
return TRUE;
}
else
{
CString strErrMsg = TranslatestringToCStringByUnicode(valueQueryResult["description"].asString());
DEBUGOUTPUT_NORMAL_STATUS(_T("服务端返回失败!失败原因:") + strErrMsg);
return FALSE;
}
}

因为我对于这个结果只想知道是否成功,所以只需要取success的值,如果失败,获取失败描述~

看到上面的例子大家应该可以看明白了,其实只需要做好“中间的临时变量”的工作,就可以将复杂的结构拆解出来成为简单的结构,大家就会解析啦~

原创粉丝点击