中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JsonCpp第二課 不同數據類型的讀取

發布時間:2020-07-24 12:17:59 來源:網絡 閱讀:1114 作者:fengyuzaitu 欄目:編程語言

1)基本數據類型的讀取
{
 "name": "fengyuzaitu",
 "age": 29.5,
 "married": false,
 "utcsecond": 1548745708,
 "utcmilisecond":1548745708000
}

 std::ifstream ifs;
 ifs.open("testdata.json", std::ios::binary);
 Json::Reader reader(Json::Features::strictMode());
 Json::Value root;
 if (NULL == reader.parse(ifs, root))
 {
  ifs.close();
  return;
 }
 ifs.close();

 if (!root["name"].isString()) return;
 if (!root["age"].isDouble()) return;
 if (!root["married"].isBool()) return;
 if (!root["utcsecond"].isInt()) return;
 if (!root["utcmilisecond"].isInt64()) return;
 
 std::string strName = root["name"].asString();
 double dAge = root["age"].asDouble();
 bool bMarried = root["married"].asBool();
 int32_t nUtcSecond = root["utcsecond"].asInt();
 int64_t nUtcMiliSecond = root["utcmilisecond"].asInt64();


2)字符串數組
{
    "success":false,
    "toReturn":[
        {
            "createTime":"20080806114526000+0800",
            "createUser":"張三"
        },
        {
            "createTime":"20080806114526000+0801",
            "createUser":"李四"
        }
    ],
    "total":2
}

 std::string strTotalNumber = root["total"].asString();
 Json::Value subValue = root["toReturn"];
 if (subValue.isNull()) return;

 size_t count = subValue.size();
 for (size_t i = 0; i < count; i++)
 {
  std::string strCreateTime = subValue[i]["createTime"].asString();
  std::string strCreateUser = subValue[i]["createUser"].asString();
 }

3)數據內嵌json文本

一般情況下如下是一個正常的json文本

{
    "msg":{
        "absTime":1521699455000,
        "ext":{"vehicleColor":"A","monitorId":"85ee85b052dd228a08494e11858060f4"}
    },
    "systemMessage":"1"
}

但是如下,將ext的內容通過雙引號包含,變成了一個字符串,解析就需要特別注意

文本內容:
{
"msg":
 {
"absTime": 1521699455000,
"ext": "{\"vehicleColor\":\"A\",\"monitorId\":\"85ee85b052dd228a08494e11858060f4\"}"
 },
"systemMessage": "1"
}內存查看
{
"msg":
 {
"absTime": 1521699455000,
"ext": "{\"vehicleColor\":\"A\",\"monitorId\":\"85ee85b052dd228a08494e11858060f4\"}"
 },
"systemMessage": "1"
}
通過轉義來區分雙引號,第一步獲取到ext對應的字符串,然后重新解析該字符串
 Json::Value msg;
 Json::Reader readerMsg(Json::Features::strictMode());
 if(NULL == readerMsg.parse(strMsg, msg) return;

 std::string strExt = msg["ext"].asString();

 Json::Value ext;
 Json::Reader readerExt(Json::Features::strictMode());
 if (readerer.parse(strExt, ext))
 {
  std::string strColor = ext["vehicleColor"].asString();
  std::string strMonitorId = ext["monitorId"].asString();
 }

注意:提示字符串中字符無效
jsoncpp 在處理 UTF-8 編碼的字符串是沒有問題,意思是可以正確的解析出鍵值對,在VS調試情況下,返回的字符串如果包含中文,會提示:字符串中字符無效,這是因為在VS調試過程中,只支持GBK編碼的中文,因此如果需要進行字符串的查看,觀察字符串的中文含義,可以先將字符串從UTF-8編碼轉換為GBK編碼,然后就可以進行變量的監視提供UTF-8轉GBK
 
std::string UTF8ToGBK(const char* szUTF8)
{
       int len = MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, NULL, 0);
       wchar_t* wstr = new wchar_t[len + 1];
       memset(wstr, 0, len + 1);
       MultiByteToWideChar(CP_UTF8, 0, szUTF8, -1, wstr, len);
       len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
       char* pszStr = new char[len + 1];
       memset(pszStr, 0, len + 1);
       WideCharToMultiByte(CP_ACP, 0, wstr, -1, pszStr, len, NULL, NULL);
       if (wstr) delete[] wstr;
       std::string str = pszStr;
       delete[] pszStr;
       return str;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

香河县| 额尔古纳市| 芮城县| 法库县| 凤庆县| 准格尔旗| 张家界市| 共和县| 大荔县| 双桥区| 蒲城县| 客服| 木里| 石阡县| 千阳县| 酒泉市| 汕头市| 宝山区| 邮箱| 东阿县| 日照市| 镇沅| 鄱阳县| 兴仁县| 望都县| 莱阳市| 麻江县| 元氏县| 馆陶县| 旅游| 晋城| 吉木萨尔县| 灌云县| 泰来县| 松滋市| 儋州市| 自贡市| 蒙阴县| 诏安县| 新巴尔虎左旗| 漳平市|