javascript
QT解析 JSON 格式的数据
QT解析 JSON 格式的數據
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。JSON 采用完全獨立于語言的文本格式,這些特性使 JSON 成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成。
1、基礎結構
名稱/值對 集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object)、記錄(record)、結構(struct)、字典(dictionary)、哈希表(hash table)、有鍵列表(keyed list),或者關聯數組 (associative array)。
值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。
2、結構剖析
JSON 語法是 JavaScript 對象表示法語法的子集。
- 數據在名稱/值對中:如 "firstName": "John"
- 數據由逗號分隔
- 花括號保存對象
- 方括號保存數組
組成JSON的值可以為以下幾種:
- 數字(整數或浮點數)
- 字符串(在雙引號中)
- 邏輯值(true 或 false)
- 數組(在方括號中)
- 對象(在花括號中)
- null
3、解析JSON
傳統的 JSON 解析莫過于直接使用 java 中的方法,它通過原生的 JSONObject 和 JSONArray 來解析 json數據,下面我們就來解析這段 json 數據。json 數據如下:
{"code": "200","location": [{"name": "北京","id": "101010100","lat": "39.90498","lon": "116.40528","adm2": "北京","adm1": "北京市","country": "中國","tz": "Asia/Shanghai","utcOffset": "+08:00","isDst": "0","type": "city","rank": "10","fxLink": "http://hfx.link/2ax1"},{"name": "海淀","id": "101010200","lat": "39.95607","lon": "116.31031","adm2": "北京","adm1": "北京市","country": "中國","tz": "Asia/Shanghai","utcOffset": "+08:00","isDst": "0","type": "city","rank": "15","fxLink": "http://hfx.link/2ay1"},{"name": "朝陽","id": "101010300","lat": "39.92148","lon": "116.48641","adm2": "北京","adm1": "北京市","country": "中國","tz": "Asia/Shanghai","utcOffset": "+08:00","isDst": "0","type": "city","rank": "15","fxLink": "http://hfx.link/2az1"}],"refer": {"sources": ["qweather.com"],"license": ["commercial license"]} }首先,能夠看到最外邊是一個大括號,我們可以直接從傳過來的 json 字符串創建出來 jsonObject 對象,然后可以通過它獲取 code 屬性所對應的值,代碼如下:
// 根據解析出來的JSON,創建具體的 JSONObject對象 QJsonObject jsonObject = Utf8Text.object(); QString codeData = jsonObject["code"].toString();接下來,我們能夠看到 "location" 所對應的值為一個 JSONArray 數組。那么,我們可以將 "location" 所對應的值提取出來,然后將其轉換成 JSONArray 數組,代碼如下:
// 將 "location" 對應的值提取出來 QJsonValue locationValue = jsonObject.value(QStringLiteral("location")); // qDebug() << locationValue; // 根據 JSON 文件可知,"location"對應值的類型為數組類型 // 將其轉換為數組類型 QJsonArray locationValueArray = locationValue.toArray();緊接著,我們可以通過 QJsonArray::at(i) 函數獲取數組下的第 i 個元素,同時每一個元素即是一個 jsonObject對象,我們再利用 QJsonValue::toObject() 函數將每一個數組元素轉換成 Object 對象,代碼如下:
for (int i = 0; i < locationValueArray.size(); i++) {// 通過 QJsonArray::at(i)函數獲取數組下的第i個元素QJsonValue locationArray = locationValueArray.at(i);// qDebug() << locationArray;// 通過 QJsonValue::toObject()函數將數組元素轉換成Object對象QJsonObject location = locationArray.toObject(); }最后,我們便可以獲取每一個對象的屬性,代碼如下:
QString Lng = location["lon"].toString(); QString lat = location["lat"].toString();總結
以上是生活随笔為你收集整理的QT解析 JSON 格式的数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关闭 VSCode 自动更新
- 下一篇: 通过加载 QSS 文件的方式美化 QT