学习datasnap,json必须掌握。用自身的JSON,就必须熟悉JSON Objects Framework。其中tostring和value区别就是一个坑。

The JSON objects framework supports all JSON types:all descendants of TJSONValue

TJSONObject
TJSONArray
TJSONNumber
TJSONString
TJSONTrue
TJSONFalse
TJSONNull

建立一个name:value “Hello”:"World"

var
LJSONObject: TJSONObject; begin
LJSONObject:= TJSONObject.Create;
LJSONObject.AddPair(TJSONPair.Create(TJSONString.Create('Hello'),
TJSONString.Create('World')));

静态类函数ParseJSONValue或函数Parse可用于将字节流解析为等效的JSON值实例。

class function ParseJSONValue(const Data: TBytes; const Offset: Integer): TJSONValue; overload; static;

使用以下代码片段将JSON字符串表示转换为JSON。

const
GJSONString =
'{' +
' "name": {'+
' "A JSON Object": {' +
' "id": "1"' +
' },' +
' "Another JSON Object": {' +
' "id": "2"' +
' }' +
' },' +
' "totalobjects": "2"' +
'}';
procedure ConsumeJsonString;
var
LJSONObject: TJSONObject; begin
LJSONObject := nil;
try
{ convert String to JSON }
LJSONObject := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(GJSONString), 0) as TJSONObject;
{这个好好看清楚,我们以后需要依葫芦画瓢}
{ output the JSON to console as String }
Writeln(LJSONObject.ToString);
finally
LJSONObject.Free;
end;


{使用parse的code snippet}
procedure ConsumeJsonBytes;
var
LJSONObject: TJSONObject; begin
LJSONObject := nil;
try
LJSONObject := TJsonObject.Create;
{ convert String to JSON }
LJSONObject.Parse(BytesOf(GJSONString), 0); { output the JSON to console as String }
Writeln(LJSONObject.ToString);
finally
LJSONObject.Free;
end;
end;

上面的输出结果一样,

{"name":{"A JSON Object":{"id":"1"},"Another JSON Object":{"id":"2"}},"totalobjects":"2"}

在JSON生命周期中,父对象拥有它所包含的任何值,除非将所属属性设置为False。在本例中,JSON对象的销毁跳过了将标记设置为False的每个成员。该特性允许将各种对象组合成更大的对象,同时保留所有权。默认情况下,属性为True,这意味着所有包含的实例都由它们的父实例拥有。

可以克隆所有JSON类型。克隆操作是一个深度克隆。克隆的对象将拥有所有的JSON实例。

服务器方法接受所有JSON类型作为输入、输出或返回参数,但它们不拥有任何JSON类型。在服务器方法执行后释放JSON实例。可以读取JSON对象并对内容作出反应,但如果需要进一步存储,则必须克隆该对象。

JSON Objects Framework(1)的更多相关文章

  1. Django rest framework(7)----分页

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  2. Django rest framework(6)----序列化

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  3. Django rest framework(5)----解析器

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  4. Django rest framework(4)----版本

    目录 Django组件库之(一) APIView源码 Django restframework (1) ----认证 Django rest framework(2)----权限 Django res ...

  5. Django rest framework(3)----节流

    目录 Django组件库之(一) APIView源码 Django restframework (1) ----认证 Django rest framework(2)----权限 Django res ...

  6. Django rest framework(1)----认证

    目录 Django组件库之(一) APIView源码 Django restframework   (1)  ----认证 Django rest framework(2)----权限 Django ...

  7. LINQ之路10:LINQ to SQL 和 Entity Framework(下)

    在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术 ...

  8. LINQ之路 9:LINQ to SQL 和 Entity Framework(上)

    在上一篇中,我们从理论和概念上详细的了解了LINQ的第二种架构“解释查询”.在这接下来的二个篇章中,我们将使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的 ...

  9. 10分钟了解JSON Web令牌(JWT)

    JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案.虫虫今天给大家介绍JWT的原理和用法. 1.跨域身份验证 Internet服务无法与用户身份验证分开.一般过程如下. 1.用户 ...

  10. JSON WEB TOKEN(JWT)的分析

    JSON WEB TOKEN(JWT)的分析 一般情况下,客户的会话数据会存在文件中,或者引入redis来存储,实现session的管理,但是这样操作会存在一些问题,使用文件来存储的时候,在多台机器上 ...

随机推荐

  1. 一个小的图文编辑软件 -- 采用winform开发

    本人用winform开发了一款图文编辑软件,实现了图片.文字.图形混合排版; 可以对图元调整大小.设置角度.添加剪切区间等操作.本人以前也写过一款类似的软件<WinForm版图像编辑小程序> ...

  2. 《CUDA编程:基础与实践》读书笔记(5):统一内存编程

    统一内存(unified memory)是一种逻辑上的概念,它既不是显存.也不是主机内存,而是CPU和GPU都可以访问并能保证一致性的虚拟存储器.使用统一内存对硬件有较高的要求: 对于所有功能,GPU ...

  3. runoob-Android 基础入门教程-2

    https://www.runoob.com/w3cnote/android-tutorial-textview.html 1.0 Android基础入门教程 1.0.1 2015年最新Android ...

  4. HBase-2JavaAPI操作

    HBase是一个分布式的NoSql数据库,在实际工作当中,我们一般都可以通过JavaAPI来进行各种数据的操作,包括创建表,以及数据的增删改查等等 1 创建maven工程 讲如下内容作为maven工程 ...

  5. 文章学习|开放,让5G网络更智能

    学习文章:开放,让5G网络更智能 介绍 从2G到5G,网络在不断发展,通信行业的生态系统在不断演进,运营商的角色也发生着改变. 在2G和3G时代,运营商作为服务提供商为用户提供通信业务和互联网业务,获 ...

  6. linux命令操作android手机

    目的 通过一台linux机器操作android手机做一些常用的操作 复杂的操作都是由简单操作开始的, 可以自行发掘 环境 笔记本: thinkpad t480 操作系统: archlinux adb版 ...

  7. 亮相CCF中国软件大会,天翼云助力千行百业搭上“数字快车”

    中国软件领域规模最大.影响最广的学术会议--CCF中国软件大会(ChinaSoft 2023)在上海国际会议中心开幕.CCF理事长.大会执行委员会荣誉zhu席.中国科学院院士梅宏,上海市经济和信息化委 ...

  8. DBeaver出现“Public Key Retrieval is not allowed”错误的解决办法

    1.问题描述 我们在使用DBeaver连接MySql的时候,可能会出现"Public Key Retrieval is not allowed"的错误提示,如下图所示: 2.解决办 ...

  9. Jenkins+Coverage的代码覆盖率集成实践

    Jenkins+Coverage的代码覆盖率集成实践 一.工具介绍 Jenkins: Jenkins是一个开源的.基于Java开发的持续集成工具,它可以帮助开发人员自动化构建.测试和部署软件项目. C ...

  10. Python 数

    Python 数 在Python中,数字是编程中不可或缺的一部分.Python支持多种类型的数字,包括整数.浮点数等.下面我们将详细介绍这些数字类型以及它们之间的运算和格式化. 整数 整数是Pytho ...