问题标签 [superobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1064 浏览

delphi - 为变长数组序列化 SuperObject JSON 会导致 FastMM“释放后修改”错误

为变长数组序列化 SuperObject JSON 会导致 FastMM“释放后修改”错误

我想知道为什么下一个测试(反)序列化变体长度数组的代码:

给出这个 FastMM4“一个块在被释放后被修改”错误(关闭程序时 - 序列化+反序列化本身给出了预期的结果):

TestSimpleVarArray 通过单击按钮调用一次。
我做错了什么还是 SuperObject 代码中存在错误?
我尝试使用 FastMM4 错误日志对其进行跟踪,但迷路了(泛型、RTTI 和接口的经验有限)。

我必须“承认”我修改了 SuperObject 代码以编译为 Delphi XE2(将 FHeapData 更改为 FValueData):

有什么线索吗?
TIA

0 投票
1 回答
152 浏览

delphi - 如何将设计时 TWebActions 与 TObjects 结构联系起来?

我有一个 Web 服务,在设计时在 TWebModule 上定义了越来越多的 TWebAction 项,并与 OnAction 事件耦合。

请求是通过 URL 进行的 HTTP GET,响应是“手工制作”的 JSON 数据,即在运行时使用诸如'TSuperObject'.S['errormessage'] := lErrMsg;
我想将其更改为带有 JSON 数据的 HTTP POST 请求的语句组成,然后将所有请求/响应 JSON 结构从(反)序列化/ 到使用 SuperObjects TSuperRttiContext AsJSONAsType方法的正确对象(可能还有记录) 。

如何创建数据结构以将我的新“要 JSON(反)序列化的对象”与设计时 TWebactions 映射/链接?这些对象都是不同的(一些属性可以在一个共同的祖先中),并且可能包含对象或记录属性本身(例如FData: Array of TSubObject[SuperObject可以很好地序列化]之类的东西)。

注意:已经有一个快速而肮脏的枚举类型,我用来收集时间统计信息(也需要维护),它也可以集成。

基本上,我想在添加新的 TWebAction 时尽量减少需要进行维护的地方的数量。

0 投票
1 回答
876 浏览

delphi - 为通过元类实例化的实例序列化 JSON 对象

SuperObject 库有一个用于序列化对象的通用方法:

但现在我正在处理元类实例。
这是对象结构:

如果我现在尝试:

我得到了 TReqBase 序列化:lJSON.AsString = '{"token":-12346789}'
我想让 TReqLogin 序列化。
试过:

  • lContext.AsJson<TReqLogin>(lRequestBase); 不起作用:不兼容的类型)[此外,我必须在我的例程中列出/处理所有可能的 RequestClass 类型]

  • lContext.AsJson< lRequestBase.ClassType >(lRequestBase) 都不是:E2531 方法“AsJson”需要显式类型参数

有什么办法可以让我的 lRequestBase 序列化为 TReqLogin、TReq... 而不必为它们全部编码?

0 投票
1 回答
180 浏览

delphi - 填充指向派生类字段的本地数组,但稍后字段为空

我必须在我的网络服务中忽略某些东西......

数据结构:

然后一个

我的 WebModule 上有一个私有字段:

在 WebmoduleBeforeDispatch 中,FWebAct 是一个 ttgetlist,我这样做:

在处理“ttgetlist”的 TWebActionItem 的 OnAction 处理程序中,这是必不可少的部分:

lListArr 此时显示正确数据,对象检查器显示:

((3, 'Activiteit 3'), (4, 'Activiteit 3.1'), (5, 'Activiteit 3.2'), (10, 'Activiteit 3.3'), (8, 'Activiteit 5'),...

在 WebmoduleAfterDispatch 中:

LJSO.AsString 确实有正确的字段(&type、success、...活动、...),例如 success=1,但活动为空

我在看什么?也许lListArr := (FResponse as TResGetList).activitiesOnAction 处理程序中的“不够好”?

顺便说一句,请随时更新问题标题,这是我能想到的最好的。

0 投票
1 回答
2977 浏览

delphi - SuperObject 无法处理空字符串

一些 JSON 序列化null程序返回一个空字符串数据字段,例如

我正在使用 SuperObject 创建一个 ISuperObject:

这将返回一个带有包含文本的字符串的对象'null'

显然这是因为 SuperObject 不关心引号("searchtext": a给出与 相同的结果"searchtext": "a")。

在我深入研究 980 行标记器例程之前,有没有人有解决方案?

我正在考虑(或者/或):

  • 将空数据字段留在 JSON 对象之外

  • 返回一个空字符串

如果一切都失败了,我仍然可以做

因为我只需要处理来自我们一位开发人员的应用程序的请求,但这并不是万无一失的。
(不,他不能抑制,null因为Mono 处理他的 datacontract 的方式存在错误。)

顺便说一句,我正在经历这里提到的行为,但是在 SuperObject 代码的另一部分,所以这种解决方法不能完成这项工作。

0 投票
2 回答
537 浏览

json - 为什么我在使用 SuperObject 解析字符串时会得到一堆问号?

我正在尝试使用 Delphi 7 中的 SuperObject 解析此字符串。

但是备忘录中的结果是这样的:

“??????????????????????????????????????????????????? ???}”

我究竟做错了什么?

0 投票
1 回答
2548 浏览

json - 如何使用 SuperObject 从 JSON 中读取 DateTime?

我使用 SuperObject 库来处理 JSON。

我有这个 JSON(Mozilla FireFox 的一部分,Chrome 书签文件):

我尝试使用函数 JavaTimeToDelphiDateTime 将数据作为整数,但它不起作用。

我需要将“date_added”字段读取为 TDateTime。如何做到这一点,使用 SuperObject 库?

0 投票
1 回答
1923 浏览

json - Delphi SuperObject 排序值的顺序与添加的顺序不同

我正在使用 SuperObject 来生成 JSON。我正在使用的服务器有一些对数据结果进行排序的规范(这与排序数据有关的事实与我关于排序的实际问题无关)。问题是,服务器希望这些值按照如何排序的顺序列出,例如......

1 表示上升,-1 表示下降。但这不是重要的部分。重要的是sort对象中的这些值必须以这种方式组织。

为了产生这个对象,我这样做:

当我使用 SuperObject 序列化这个“排序”对象时,问题就出现了。这些值似乎是重新排列的,所以例如上面的 JSON 实际上会是这样的:

这与我预期的顺序不同。这会导致服务器返回以与预期不同的方式排序的响应数据。

问题是,我怎样才能让 SuperObject 按照我添加的顺序而不是它自己的顺序来序列化数据?我认为它可能按 ABC 顺序对值进行排序,但是当组合不同类型的值(字符串、整数、对象、数组等)时,它们不是按 ABC 顺序排列的。我想强制 SuperObject 按照我添加的顺序序列化数据。

我能看到的唯一解决方案是通过连接字符串手动序列化这个对象。但如果可能的话,我想避免这种情况——这就是我首先使用 SuperObject 的原因。

0 投票
1 回答
357 浏览

json - 有没有办法在现场解析 JSON 并触发事件?

现在,我正在使用 SuperObject 解析我的 JSON 数据(从服务器接收它时),然后将其转储到客户端数据集中。可能有非常大量的数据来自服务器。目前,我必须首先将该 JSON 数据解析为ISuperObject,然后遍历它以填充客户端数据集。

我想知道是否有办法绕过双重加载触发事件事件。例如,一旦解析器检测到一个新对象的开始,它就会触发一个事件,然后我会在现场准备相应的对象。或者当它解析一个数组时,我可以准备一个新的数据集记录。

原因是对于非常大的数据集,有时需要几秒钟,我必须等待它完成解析才能使用它。如果我得到数据在解析数据时获得了数据,我可以立即在现场使用该数据。

我已经实现了每页 200-500 条记录(数百万条记录)的分页,其中包含许多列。在响应性方面,分页仍然不能解决全部需求。

我怎样才能做到这一点,无论是使用 SuperObject 还是任何其他已知机制,而无需编写我自己的完整解析器?

0 投票
1 回答
470 浏览

c++builder - 在 C++Builder 中创建一个空的 OPENARRAY

我正在使用带有 SuperObject JSON 解析器的 C++Builder,并尝试构造一个数组。

现在,上面的代码做了我想要的——除非v.size() == 0。在这种情况下,我得到一个包含单个“空”字符串的数组。

这是因为使用ARRAYOFCONST(("")).

创建“空”OPENARRAY以传递给 SuperObject 的正确方法是什么?