JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式。JSON
采用完全独立于语言的文本格式,这些特性使JSON
成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
名称/值对
集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object)、记录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
JSON
语法是 JavaScript
对象表示法语法的子集。
"firstName": "John"
组成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();