You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XSuperObject访问多层级JSON结构的内部数据?

使用XSuperObject解析多层级JSON天气数据指南

基础加载JSON

先把TMemo里的JSON文本加载到ISuperObject对象中:

var
  JsonObj: ISuperObject;
begin
  JsonObj := SO(TMemo1.Text); // 从TMemo读取JSON内容
end;

访问嵌套对象数据

XSuperObject支持用.直接链式访问多层嵌套的对象属性,以下是针对常见天气JSON结构的示例:

假设你的JSON片段结构如下:

{
"location": {
"name": "北京",
"country": "CN"
},
"current": {
"temp_c": 25,
"condition": {
"text": "多云"
}
}
}

提取这些数据到TListBox的代码:

// 获取城市名称
ListBox1.Items.Add('城市: ' + JsonObj.S['location.name']);
// 获取当前温度(浮点型用F方法)
ListBox1.Items.Add('当前温度(℃): ' + FloatToStr(JsonObj.F['current.temp_c']));
// 获取天气状况描述
ListBox1.Items.Add('天气状况: ' + JsonObj.S['current.condition.text']);

遍历JSON数组

如果JSON里包含数组(比如未来几天的预报),用A方法获取数组对象,再循环遍历:

假设JSON里的预报数组部分:

"forecast": {
"forecastday": [
{
"date": "2024-05-20",
"day": {
"maxtemp_c": 28,
"mintemp_c": 18
}
},
{
"date": "2024-05-21",
"day": {
"maxtemp_c": 30,
"mintemp_c": 20
}
}
]
}

遍历代码:

var
  ForecastArr: ISuperArray;
  ForecastItem: ISuperObject;
  I: Integer;
begin
  ListBox1.Items.Add('=== 未来天气预报 ===');
  ForecastArr := JsonObj.A['forecast.forecastday']; // 获取数组
  if ForecastArr <> nil then
  begin
    for I := 0 to ForecastArr.Length - 1 do
    begin
      ForecastItem := ForecastArr[I];
      ListBox1.Items.Add('日期: ' + ForecastItem.S['date']);
      ListBox1.Items.Add('最高温: ' + FloatToStr(ForecastItem.F['day.maxtemp_c']) + '℃');
      ListBox1.Items.Add('最低温: ' + FloatToStr(ForecastItem.F['day.mintemp_c']) + '℃');
      ListBox1.Items.Add(''); // 空行分隔
    end;
  end
  else
    ListBox1.Items.Add('未获取到预报数据');
end;

防错处理

为避免JSON节点不存在导致报错,访问前先判断节点是否存在:

// 检查location节点是否存在
if JsonObj.O['location'] <> nil then
  ListBox1.Items.Add('城市: ' + JsonObj.S['location.name'])
else
  ListBox1.Items.Add('未获取到位置信息');

内容的提问来源于stack exchange,提问作者Sjubussen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:05:18