
https://blog.csdn.net/qq_18932003/article/details/105016255 |
一、Delphi读取JSON数组是非常方便的,首先我们网上找一段JSON数据 |
复制代码 |
{ |
"error": 0, |
"status": "success", |
"date": "2014-03-04", |
"results": [{ |
"currentCity": "成都", |
"weather_data": [{ |
"date": "周二(今天, 实时:12℃)", |
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png", |
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png", |
"weather": "多云", |
"wind": "北风微风", |
"temperature": "15 ~ 6℃" |
}, { |
"date": "周三", |
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/yin.png", |
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/xiaoyu.png", |
"weather": "阴转小雨", |
"wind": "北风微风", |
"temperature": "14 ~ 7℃" |
}, { |
"date": "周四", |
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/xiaoyu.png", |
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/xiaoyu.png", |
"weather": "小雨", |
"wind": "北风微风", |
"temperature": "12 ~ 7℃" |
}, { |
"date": "周五", |
"dayPictureUrl": "http://api.map.baidu.com/images/weather/day/xiaoyu.png", |
"nightPictureUrl": "http://api.map.baidu.com/images/weather/night/xiaoyu.png", |
"weather": "小雨", |
"wind": "南风微风", |
"temperature": "9 ~ 6℃" |
}] |
}] |
} |
复制代码 |
|
二、我们用Delphi读取,代码如下: |
复制代码 |
uses |
REST.Json, |
System.Json, |
System.Types, |
System.Json.Types, |
System.Json.Writers, |
System.Json.Builders, |
System.Json.Serializers; |
|
procedure TForm1.Button7Click(Sender: TObject); |
var |
m_JSONObject: TJSONObject; |
m_Item1, m_Item2, m_Item3, m_Item4: TJSONValue; |
m_Weather: TJSONArray; |
m_Str: string; |
m_Result: string; |
I: Integer; |
begin |
// 读JSON文本 |
m_Str := Trim(Memo1.text); |
// 防止乱码 |
m_JSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(m_Str), 0) as TJSONObject; |
// 读取results的数据 |
m_JSONObject := (m_JSONObject.GetValue('results') as TJSONArray).Get(0) as TJSONObject; |
// 读取results中的weather_data的数组 |
m_Weather := m_JSONObject.GetValue('weather_data') as TJSONArray; |
// 循环读天气数据 |
for I := 0 to m_Weather.size - 1 do |
begin |
// 取天气值 |
m_Item1 := (m_Weather.Get(I) as TJSONObject).GetValue('date'); |
m_Item2 := (m_Weather.Get(I) as TJSONObject).GetValue('weather'); |
m_Item3 := (m_Weather.Get(I) as TJSONObject).GetValue('wind'); |
m_Item4 := (m_Weather.Get(I) as TJSONObject).GetValue('temperature'); |
// 输出 |
Memo2.Lines.Add(Format('【日期%s】,【天气%s】,【风速%s】,【温度%s】', [m_Item1.Value, m_Item2.Value, m_Item3.Value, m_Item4.Value])); |
end; |
m_JSONObject.Free; |
end; |
复制代码 |
三、运行一下,结果如下: |
|
不忘初心,如果您认为这篇文章有价值,认同作者的付出,可以微信二维码打赏任意金额给作者(微信号:382477247)哦,谢谢。 |



