最近项目中要使用Json交换数据,曾有印象Delphi2009的宣传文章中已经支持Json了,我想2010中应该也会有吧。用Json这个词在安装目录搜索了一番,却只找到DBXJSON和DBXJSONReflect,从名字上看就已经很失望了。但还是不死心,于是进去看看源代码。果然只是给DataSnap准备的。

既然官方不支持,只能自谋生路了,看过万一老师推荐的JSON – SuperObject v1.1应该也是不错的东西,不过我不太喜欢接口调用,就没有仔细去看了。

Json的官方网站上也列出了一个For Delphi的库,名字是:lkjson( 官方网站 )。于是下载下来,大致看了一下代码很轻量。

由于刚入手还不了解,简单说一下使用方法:

1,载入

var Jso: TlkJSONbase;

begin

Jso:=TlkJSON.ParseText(Memo1.Text);

从字符串中载入Json,并返回一个TlkJSONbase对象,当然使用完毕后记得释放掉它。

2,节点处理

TlkJSONbase是所有Json总类的父类,通过它的SelfType方法可以获取节点的类型,然后根据类型把它转化成相应的类去操作。

例如 (Json as TlkJSONObject)

下面列出全部的类型与操作说明:

jsBase

值对类型。相关类:TlkJSONobjectmethod。

(Json as TlkJSONobjectmethod).Name: 节点的名称

(Json as TlkJSONobjectmethod).ObjValue: 节点的值,注意ObjValue的类型还是TlkJSONbase依然需要用SelfType来判断具体类型。

jsList,

数组类型。相关类:TlkJSONlist

(Json as TlkJSONlist).Count:获取数组的长度。

(Json as TlkJSONlist).IndexOf(n): 获取数组的第N个元素,返回值依然是TlkJSONbase。

jsObject

对象类型。相关类:TlkJSONObject。

(Json as TlkJSONObject).Name: 获取属性的长度

(Json as TlkJSONObject).IndexOfName('N'): 获取名为N的属性的值,返回值依然是TlkJSONbase。

jsNumber,

整数或浮点数,可以用Value来直接获取,不用转化类了。

jsString,

字符串。同上。

jsBoolean,

布尔值,同上。

jsNull,

空值,同上。

3,介于以上理解为了加深印象我写了一个简单的json格式化函数。

uses uLkJSON;function FormatJson(Jso: TlkJSONbase; Level:Integer): String;
var I:Integer;
begin   if Jso is TlkJSONobjectmethod then beginwith TlkJSONobjectMethod(Jso) do beginResult:='"'+Name+'" : ';Jso:=ObjValue;end;end else Result:='';TlkJSONObject(Jso).IndexOfName()if Jso is TlkJSONObject then beginResult:=Result+'{'#13#10;for I := 0 to Jso.Count - 1 do beginResult:=Result+StringOfChar(#9,Level+1)+FormatJson(Jso.Child[I],Level+1);if I<>Jso.Count-1 thenResult:=Result+','#13#10elseResult:=Result+#13#10;end;Result:=Result+StringOfChar(#9,Level)+'}';endelse if Jso is TlkJSONlist then begin    Result:=Result+'['#13#10;for I := 0 to Jso.Count - 1 do beginResult:=Result+StringOfChar(#9,Level+1)+FormatJson(Jso.Child[I],Level+1);if I<>Jso.Count-1 then Result:=Result+','#13#10elseResult:=Result+#13#10;end;Result:=Result+StringOfChar(#9,Level)+']';endelse begin if Jso.SelfType=jsString then Result:=Result+'"'+Jso.Value+'"'elseResult:=Result+VarToStr(Jso.Value);       end;
end;procedure TForm20.Button1Click(Sender: TObject);
var Jso: TlkJSONbase;
beginJso := TlkJSON.ParseText(Memo1.Text);tryMemo1.Clear;Memo1.Text := FormatJson(Jso,0);finallyJso.Free;end;
end;

转载于:https://www.cnblogs.com/manors/archive/2010/01/28/How_To_Use_lkjson.html

使用lkjson处理Json数据相关推荐

  1. python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)

    前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...

  2. 深入分析jquery解析json数据

    我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: {"comments":[{& ...

  3. JSon数据查询---Jlinq

    LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作 ...

  4. java json发送文件_关于java:REST API设计在同一请求中将JSON数据和文件发送到api...

    我正在现有应用程序之上创建一个RESTAPI.其中一个特性接受JSON数据以及用户上传的文件. 我不确定如何将同一请求中的文件和JSON数据发送到RESTAPI? 我让JSON部件工作,并使用curl ...

  5. C++通过HTTP请求Get或Post方式请求Json数据(转)

    原文网址:https://www.cnblogs.com/shike8080/articles/6549339.html #pragma once #include <iostream> ...

  6. AngularJS学习笔记(3)——通过Ajax获取JSON数据

    通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...

  7. php JSON数据格式化输出方法

    php 的json_encode能把数组转换为json格式的字符串.字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4.人阅读比较困难.现在这个方法在json_encode的基 ...

  8. Web 开发人员必备的随机 JSON 数据生成工具

    在 Web 开发中,经常会需要一些测试数据来测试接口或者功能时候正确.JSON Generator 就是这样一款生成随机 JSON 数据的在线工具,Web 开发人员必备,记得收藏和分享啊. 您可能感兴 ...

  9. Android之解析Android Map地图返回的Json数据

    先上一下需要解析的Json数据: {    "results" : [       {          "address_components" : [   ...

  10. [IOS]UIWebView实现保存页面和读取服务器端json数据

    如何通过viewView保存访问过的页面?和如何获取并解析服务器端发送过来的json数据?通过一个简单的Demo来学习一下吧! 操作步骤: 1.创建SingleViewApplication应用,新建 ...

最新文章

  1. imu oracle,问一个关于IMU REDO的问题~
  2. UA MATH563 概率论的数学基础 中心极限定理10 Borel-Cantelli引理
  3. poj-1979 dfs
  4. 跟我学AI建模:分子动力学仿真模拟之DeepMD-kit框架
  5. BI报表系统在银行业的应用
  6. js创建对象的几种常用方式小结(推荐)
  7. python 中主线程结束 子线程还在运行么_「干货」python线程笔记
  8. 任正非要“拿钱砸人”的芯片产业:平均薪资 10424 元,人才缺口超 30 万!
  9. WSL2之gdb通过qemu调试ARM汇编(五)
  10. JDK API文档中文版(1.6、1.8、1.9)(附百度网盘下载地址)
  11. 手把手教你Tiny4412 Android5.0 定制 按下开发板上的按键通过广播发送到应用层
  12. 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
  13. 下载安装electron和electron-builder遇到的问题及部分解决办法
  14. Linux MySQL8.0.11版本升级到MySQL8.0.23【数据库备份】
  15. Ink脚本语言学习笔记(小结)
  16. 华为路由器:配置禁止P2P软件下载的示例
  17. 中文标点符号unicode码
  18. php毕业论文致谢,科学网—我也晒一下毕业论文致谢,感谢诸多帮助过我的人 - 何浩宇的博文...
  19. 中国平安增持华夏幸福5.69%股权 看好长期战略协同
  20. 微信小程序之数据交互

热门文章

  1. wordpress 修改上传文件大小限制
  2. rust工作台可以拾取吗_10台铝型材工作台一周交货可以吗
  3. 在线图片压缩png 和 gif,docsmall.com
  4. linux中检测到时钟错误,make: 警告:检测到时钟错误。您的创建可能是不完整的
  5. 2021-08-26BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding
  6. 决策控制方法:sequential 规划、behavior-aware规划、端到端规划
  7. Crashing Balloon ZOJ1003
  8. 304.二维区域和检索-矩阵不可变
  9. 为什么构造函数不能声明为虚函数?
  10. docker常用操作和命令