使用lkjson处理Json数据
最近项目中要使用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数据相关推荐
- python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)
前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...
- 深入分析jquery解析json数据
我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. JSON数据如下,是一个嵌套JSON: {"comments":[{& ...
- JSon数据查询---Jlinq
LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作 ...
- java json发送文件_关于java:REST API设计在同一请求中将JSON数据和文件发送到api...
我正在现有应用程序之上创建一个RESTAPI.其中一个特性接受JSON数据以及用户上传的文件. 我不确定如何将同一请求中的文件和JSON数据发送到RESTAPI? 我让JSON部件工作,并使用curl ...
- C++通过HTTP请求Get或Post方式请求Json数据(转)
原文网址:https://www.cnblogs.com/shike8080/articles/6549339.html #pragma once #include <iostream> ...
- AngularJS学习笔记(3)——通过Ajax获取JSON数据
通过Ajax获取JSON数据 以我之前写的与用户交互的动态清单列表为例,使用JSON前todo.html代码如下: <!DOCTYPE html> <html ng-app=&quo ...
- php JSON数据格式化输出方法
php 的json_encode能把数组转换为json格式的字符串.字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4.人阅读比较困难.现在这个方法在json_encode的基 ...
- Web 开发人员必备的随机 JSON 数据生成工具
在 Web 开发中,经常会需要一些测试数据来测试接口或者功能时候正确.JSON Generator 就是这样一款生成随机 JSON 数据的在线工具,Web 开发人员必备,记得收藏和分享啊. 您可能感兴 ...
- Android之解析Android Map地图返回的Json数据
先上一下需要解析的Json数据: { "results" : [ { "address_components" : [ ...
- [IOS]UIWebView实现保存页面和读取服务器端json数据
如何通过viewView保存访问过的页面?和如何获取并解析服务器端发送过来的json数据?通过一个简单的Demo来学习一下吧! 操作步骤: 1.创建SingleViewApplication应用,新建 ...
最新文章
- imu oracle,问一个关于IMU REDO的问题~
- UA MATH563 概率论的数学基础 中心极限定理10 Borel-Cantelli引理
- poj-1979 dfs
- 跟我学AI建模:分子动力学仿真模拟之DeepMD-kit框架
- BI报表系统在银行业的应用
- js创建对象的几种常用方式小结(推荐)
- python 中主线程结束 子线程还在运行么_「干货」python线程笔记
- 任正非要“拿钱砸人”的芯片产业:平均薪资 10424 元,人才缺口超 30 万!
- WSL2之gdb通过qemu调试ARM汇编(五)
- JDK API文档中文版(1.6、1.8、1.9)(附百度网盘下载地址)
- 手把手教你Tiny4412 Android5.0 定制 按下开发板上的按键通过广播发送到应用层
- 第十一周项目1——二叉树算法验证(3) 中序线索化二叉树的算法验证
- 下载安装electron和electron-builder遇到的问题及部分解决办法
- Linux MySQL8.0.11版本升级到MySQL8.0.23【数据库备份】
- Ink脚本语言学习笔记(小结)
- 华为路由器:配置禁止P2P软件下载的示例
- 中文标点符号unicode码
- php毕业论文致谢,科学网—我也晒一下毕业论文致谢,感谢诸多帮助过我的人 - 何浩宇的博文...
- 中国平安增持华夏幸福5.69%股权 看好长期战略协同
- 微信小程序之数据交互
热门文章
- wordpress 修改上传文件大小限制
- rust工作台可以拾取吗_10台铝型材工作台一周交货可以吗
- 在线图片压缩png 和 gif,docsmall.com
- linux中检测到时钟错误,make: 警告:检测到时钟错误。您的创建可能是不完整的
- 2021-08-26BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding
- 决策控制方法:sequential 规划、behavior-aware规划、端到端规划
- Crashing Balloon ZOJ1003
- 304.二维区域和检索-矩阵不可变
- 为什么构造函数不能声明为虚函数?
- docker常用操作和命令