学习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. 老奶奶看了都会的WSL2连接USB设备教程!

    老奶奶看了都会的WSL2-Ubuntu连接USB设备教程! 作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 参考资料:微软官方文档连接 USB 设备 | Mic ...

  2. WPF刮刮乐

    WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...

  3. 深入理解第一范式(1NF):数据库设计中的基础与实践

    title: 深入理解第一范式(1NF):数据库设计中的基础与实践 date: 2025/1/15 updated: 2025/1/15 author: cmdragon excerpt: 在关系型数 ...

  4. SpringBoot启动报错:HikariPool-1 - Exception during pool initialization.

    不说废话,直接上错误信息: 2020-06-23 10:48:19.899 INFO 10608 --- [ main] cn.wps.ep.account.sync.Application : St ...

  5. HTML 基本骨架

    HTML 基本骨架 HTML5的骨架是构建HTML5页面的基础结构,它主要由以下几个部分组成: <!DOCTYPE html> <html> <head> < ...

  6. Luogu P9870 NOIp2023 双序列拓展 题解 [ 紫 ] [ 动态规划 ] [ 分治 ] [ adhoc ]

    双序列拓展:很妙的特殊性质类 dp 题,由部分分引导向正解. 题意简化 你可以把序列 \(X\) 和序列 \(Y\) 中的每一个数复制若干倍并接到这个数后面,问能否构造出一种方案,使得两个序列长度相等 ...

  7. C# DataTable 类使用

    命名空间: System.Data 程序集: System.Data.Common.dll 参考连接:https://docs.microsoft.com/zh-cn/dotnet/api/syste ...

  8. [开源自荐] Catime 不一样的计时器(番茄时钟),非常欢迎反馈

    Catime 一款简洁的 Windows 倒计时工具,具有透明界面和丰富的自定义选项. Github:https://github.com/vladelaina/Catime 特点 极简设计: 透明界 ...

  9. 如何修改JSONObject 的值

    问 题 { "result": { "total": "3", "shops": [ { "shopId&qu ...

  10. docker - [16] Swarm集群搭建

    以下是购买的阿里云服务器ECS的四个实例,确保四台服务器互相可以ping通. 一.环境准备(安装docker) (1)安装gcc相关环境(在四台服务器上) yum -y install gcc yum ...