DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: shz0000
今日帖子: 0
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 fausten (fausten) ★☆☆☆☆ -
盒子活跃会员
2017/7/20 9:12:29
标题:
lazarus下如何读取json 浏览:812
加入我的收藏
楼主: 手欠,取最新的fpc和lazarus源码,并且编译。然后原来lazarus版本1.6的时候写的读取json的程序就突然不行了。然后就按照官方的例子程序重新写了以下。我把读取方式整理如下:
1. json数据格式:
{
  "PASSWORD":"123",
  "TRXINFO":
  {
    "REFNO":"1489642073087",
    "MEMNUMBER":"",
    "PAYBY":"微信",
    "TOTALAMOUNT":"4.70",
    "PAIDAMOUNT":"4.70",
    "TIME":"2017-03-16 13:27:53"
  },
  "ITEMS":
  [
    {
      "ITEMCODE":"0102000600",
      "FULLNAME":"蔬菜/根茎类/西红柿",
      "UNIT":"斤",
      "BARCODE":"",
      "COUNT":"0.350",
      "PRICE":"4.50",
      "AMOUNT":"1.58"
    },
    {
      "ITEMCODE":"0102000600",
      "FULLNAME":"蔬菜/根茎类/西红柿",
      "UNIT":"斤",
      "BARCODE":"",
      "COUNT":"0.350",
      "PRICE":"4.50",
      "AMOUNT":"1.58"
    },
    {
      "ITEMCODE":"0102000600",
      "FULLNAME":"蔬菜/根茎类/西红柿",
      "UNIT":"斤",
      "BARCODE":"",
      "COUNT":"0.350",
      "PRICE":"4.50",
      "AMOUNT":"1.58"
    }
  ]
}

2. 读取:
var
  jsarray: tjsonarray;
  js : tjsondata;
  js1,js2,js3: tjsonobject;
  P : TJSONParser;
  D : TJSONData;

  try
    p := tjsonparser.create(jsonstring,[]);
    P.Options:=P.Options+[joStrict];
    d := p.parse;
    js := tjsonobject.Create;

    password := TJsonObject(d).get('PASSWORD','');
    if session.query.fieldbyname('c_password').asstring<>password then begin
      TJSonObject(js).Add('RETCODE','1');
      TJsonObject(js).add('MSG','password error!');
      result := js.Asjson;
      exit;
    end;

    try
      try
        js1 := TjsonObject(TJsonObject(d).get('TRXINFO',js3));
        refno := js1.get('REFNO','');
        memno := js1.get('MEMNUMBER','');
        payby := js1.get('PAYBY','');
        totalamount := js1.get('TOTALAMOUNT','');
        paidamount := js1.get('PAIDAMOUNT','');
        trxtime := js1.get('TIME','');

        jsarray := tjsonobject(d).Get('ITEMS',jsarray);
        for j := 0 to jsarray.count-1 do begin
          js2 := TJSONObject(jsarray.items[j]);
          fullname := js2.get('FULLNAME','');
          barcode := js2.get('BARCODE','');
          count := js2.get('COUNT','');
          price := js2.get('PRICE','');
          amount := js2.get('AMOUNT','');
          unitstr := js2.get('UNIT','');
        end;
      except
        on e: exception do begin
          tjsonobject(js).Add('RETCODE','1');
          tjsonobject(js).add('MSG',e.message);
          result := js.asjson;
          exit;
        end;
      end;
    finally
    end;

    tjsonobject(js).Add('RETCODE','0');
    result := js.asjson;
  finally
    js.free;
    p.free;
    d.free;
  end;
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.06836毫秒 RSS