• 解析天气预报JSON数据


    解析天气预报JSON数据

    JSON字符串

    const
    json2 = '{' + #13#10 +
    '"error":0,' + #13#10 +
    '"status":"success",'+ #13#10 +
    '"date":"2014-03-04",'+ #13#10 +
    '"results":'+ #13#10 +
    '[{"currentCity":"成都",'+ #13#10 +
    ' "weather_data":['+ #13#10 +
    '{'+ #13#10 +
    '"date":"周二(今天, 实时:12℃)",'+ #13#10 +
    '"dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png",'+ #13#10 +
    '"nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png",'+ #13#10 +
    '"weather":"多云",'+ #13#10 +
    '"wind":"北风微风",'+ #13#10 +
    '"temperature":"15 ~ 6℃"'+ #13#10 +
    '},'+ #13#10 +
    '{'+ #13#10 +
    '"date":"周三",'+ #13#10 +
    '"dayPictureUrl":"http://api.map.baidu.com/images/weather/day/yin.png",'+ #13#10 +
    '"nightPictureUrl":"http://api.map.baidu.com/images/weather/night/xiaoyu.png",'+ #13#10 +
    '"weather":"阴转小雨",'+ #13#10 +
    '"wind":"北风微风",'+ #13#10 +
    '"temperature":"14 ~ 7℃"'+ #13#10 +
    '},'+ #13#10 +
    '{'+ #13#10 +
    '"date":"周四",'+ #13#10 +
    '"dayPictureUrl":"http://api.map.baidu.com/images/weather/day/xiaoyu.png",'+ #13#10 +
    '"nightPictureUrl":"http://api.map.baidu.com/images/weather/night/xiaoyu.png",'+ #13#10 +
    '"weather":"小雨",'+ #13#10 +
    '"wind":"北风微风",'+ #13#10 +
    '"temperature":"12 ~ 7℃"'+ #13#10 +
    '},'+ #13#10 +
    '{'+ #13#10 +
    '"date":"周五",'+ #13#10 +
    '"dayPictureUrl":"http://api.map.baidu.com/images/weather/day/xiaoyu.png",'+ #13#10 +
    '"nightPictureUrl":"http://api.map.baidu.com/images/weather/night/xiaoyu.png",'+ #13#10 +
    '"weather":"小雨",'+ #13#10 +
    '"wind":"南风微风",'+ #13#10 +
    '"temperature":"9 ~ 6℃"'+ #13#10 +
    '}'+ #13#10 +
    ']'+ #13#10 +
    '}'+ #13#10 +
    ']}';

    1)MORMOT SDK解析JSON:

    uses
    SynCommons;

    procedure TForm1.Button5Click(Sender: TObject);
    var
    doc: variant;
    json: RawUTF8;
    count, i: Integer;
    begin
    doc := _JsonFast(JSON2); // json还原为variant
    Memo1.Clear;
    Memo1.Lines.Add(doc.error); // 0
    Memo1.Lines.Add(doc.status); // success
    Memo1.Lines.Add(doc.date); // 2014-03-04
    Memo1.Lines.Add(doc.results._(0).currentCity); // 成都
    count := doc.results._(0).weather_data._count; // 取JSON数组 长度
    for i := 0 to count - 1 do // 遍历JSON数组
    Memo1.Lines.Add(doc.results._(0).weather_data._(i).weather);
    end;

    2)DELPHI官方库解析JSON:

     procedure TfjsonDemo.Button1Click(Sender: TObject);
    var
      root, results: TJSONObject;
      LItem: TJSONValue;
      weather: TJSONArray;
      StrJson: string;
      result: string;
      i: Integer;
    begin
      StrJson := Memo1.Text;
      root := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(StrJson), 0) as TJSONObject;
      results := (root.GetValue('results') as TJSONArray).Get(0) as TJSONObject;
      weather := results.GetValue('weather_data') as TJSONArray;

      for i := 0 to weather.size - 1 do //应该是4条记录
      begin
        LItem := (weather.Get(i) as TJSONObject).GetValue('weather'); //得到weather的值
        result := result + '|'+ LItem.Value;
      end;
      Memo2.Text := result;
    end;  

  • 相关阅读:
    LUOGU P3355 骑士共存问题(二分图最大独立集)
    LUOGU P1453 城市环路(基环树+dp)
    BZOJ 1441 Min (裴蜀定理)
    LUOGU P1342 请柬(最短路)
    LUOGU P1186 玛丽卡
    LUOGU P2580 于是他错误的点名开始了(trie树)
    l洛谷 NOIP提高组模拟赛 Day2
    bzoj 4372 烁烁的游戏——动态点分治+树状数组
    bzoj 3730 震波——动态点分治+树状数组
    hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/8796586.html
Copyright © 2020-2023  润新知