问题标签 [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.
delphi - 为变长数组序列化 SuperObject JSON 会导致 FastMM“释放后修改”错误
为变长数组序列化 SuperObject JSON 会导致 FastMM“释放后修改”错误
我想知道为什么下一个测试(反)序列化变体长度数组的代码:
给出这个 FastMM4“一个块在被释放后被修改”错误(关闭程序时 - 序列化+反序列化本身给出了预期的结果):
TestSimpleVarArray 通过单击按钮调用一次。
我做错了什么还是 SuperObject 代码中存在错误?
我尝试使用 FastMM4 错误日志对其进行跟踪,但迷路了(泛型、RTTI 和接口的经验有限)。
我必须“承认”我修改了 SuperObject 代码以编译为 Delphi XE2(将 FHeapData 更改为 FValueData):
有什么线索吗?
TIA
delphi - 如何将设计时 TWebActions 与 TObjects 结构联系起来?
我有一个 Web 服务,在设计时在 TWebModule 上定义了越来越多的 TWebAction 项,并与 OnAction 事件耦合。
请求是通过 URL 进行的 HTTP GET,响应是“手工制作”的 JSON 数据,即在运行时使用诸如'TSuperObject'.S['errormessage'] := lErrMsg;
我想将其更改为带有 JSON 数据的 HTTP POST 请求的语句组成,然后将所有请求/响应 JSON 结构从(反)序列化/ 到使用 SuperObjects TSuperRttiContext AsJSON和AsType方法的正确对象(可能还有记录) 。
如何创建数据结构以将我的新“要 JSON(反)序列化的对象”与设计时 TWebactions 映射/链接?这些对象都是不同的(一些属性可以在一个共同的祖先中),并且可能包含对象或记录属性本身(例如FData: Array of TSubObject
[SuperObject可以很好地序列化]之类的东西)。
注意:已经有一个快速而肮脏的枚举类型,我用来收集时间统计信息(也需要维护),它也可以集成。
基本上,我想在添加新的 TWebAction 时尽量减少需要进行维护的地方的数量。
delphi - 为通过元类实例化的实例序列化 JSON 对象
SuperObject 库有一个用于序列化对象的通用方法:
但现在我正在处理元类实例。
这是对象结构:
如果我现在尝试:
我得到了 TReqBase 序列化:lJSON.AsString = '{"token":-12346789}'
我想让 TReqLogin 序列化。
试过:
lContext.AsJson<TReqLogin>(lRequestBase); 不起作用:不兼容的类型)[此外,我必须在我的例程中列出/处理所有可能的 RequestClass 类型]
lContext.AsJson< lRequestBase.ClassType >(lRequestBase) 都不是:E2531 方法“AsJson”需要显式类型参数
有什么办法可以让我的 lRequestBase 序列化为 TReqLogin、TReq... 而不必为它们全部编码?
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).activities
OnAction 处理程序中的“不够好”?
顺便说一句,请随时更新问题标题,这是我能想到的最好的。
delphi - SuperObject 无法处理空字符串
一些 JSON 序列化null
程序返回一个空字符串数据字段,例如
我正在使用 SuperObject 创建一个 ISuperObject:
这将返回一个带有包含文本的字符串的对象'null'
。
显然这是因为 SuperObject 不关心引号("searchtext": a
给出与 相同的结果"searchtext": "a"
)。
在我深入研究 980 行标记器例程之前,有没有人有解决方案?
我正在考虑(或者/或):
将空数据字段留在 JSON 对象之外
返回一个空字符串
如果一切都失败了,我仍然可以做
因为我只需要处理来自我们一位开发人员的应用程序的请求,但这并不是万无一失的。
(不,他不能抑制,null
因为Mono 处理他的 datacontract 的方式存在错误。)
顺便说一句,我正在经历这里提到的行为,但是在 SuperObject 代码的另一部分,所以这种解决方法不能完成这项工作。
json - 为什么我在使用 SuperObject 解析字符串时会得到一堆问号?
我正在尝试使用 Delphi 7 中的 SuperObject 解析此字符串。
但是备忘录中的结果是这样的:
“??????????????????????????????????????????????????? ???}”
我究竟做错了什么?
json - 如何使用 SuperObject 从 JSON 中读取 DateTime?
我使用 SuperObject 库来处理 JSON。
我有这个 JSON(Mozilla FireFox 的一部分,Chrome 书签文件):
我尝试使用函数 JavaTimeToDelphiDateTime 将数据作为整数,但它不起作用。
我需要将“date_added”字段读取为 TDateTime。如何做到这一点,使用 SuperObject 库?
json - Delphi SuperObject 排序值的顺序与添加的顺序不同
我正在使用 SuperObject 来生成 JSON。我正在使用的服务器有一些对数据结果进行排序的规范(这与排序数据有关的事实与我关于排序的实际问题无关)。问题是,服务器希望这些值按照如何排序的顺序列出,例如......
1 表示上升,-1 表示下降。但这不是重要的部分。重要的是sort
对象中的这些值必须以这种方式组织。
为了产生这个对象,我这样做:
当我使用 SuperObject 序列化这个“排序”对象时,问题就出现了。这些值似乎是重新排列的,所以例如上面的 JSON 实际上会是这样的:
这与我预期的顺序不同。这会导致服务器返回以与预期不同的方式排序的响应数据。
问题是,我怎样才能让 SuperObject 按照我添加的顺序而不是它自己的顺序来序列化数据?我认为它可能按 ABC 顺序对值进行排序,但是当组合不同类型的值(字符串、整数、对象、数组等)时,它们不是按 ABC 顺序排列的。我想强制 SuperObject 按照我添加的顺序序列化数据。
我能看到的唯一解决方案是通过连接字符串手动序列化这个对象。但如果可能的话,我想避免这种情况——这就是我首先使用 SuperObject 的原因。
json - 有没有办法在现场解析 JSON 并触发事件?
现在,我正在使用 SuperObject 解析我的 JSON 数据(从服务器接收它时),然后将其转储到客户端数据集中。可能有非常大量的数据来自服务器。目前,我必须首先将该 JSON 数据解析为ISuperObject
,然后遍历它以填充客户端数据集。
我想知道是否有办法绕过双重加载触发事件事件。例如,一旦解析器检测到一个新对象的开始,它就会触发一个事件,然后我会在现场准备相应的对象。或者当它解析一个数组时,我可以准备一个新的数据集记录。
原因是对于非常大的数据集,有时需要几秒钟,我必须等待它完成解析才能使用它。如果我得到数据在解析数据时获得了数据,我可以立即在现场使用该数据。
我已经实现了每页 200-500 条记录(数百万条记录)的分页,其中包含许多列。在响应性方面,分页仍然不能解决全部需求。
我怎样才能做到这一点,无论是使用 SuperObject 还是任何其他已知机制,而无需编写我自己的完整解析器?
c++builder - 在 C++Builder 中创建一个空的 OPENARRAY
我正在使用带有 SuperObject JSON 解析器的 C++Builder,并尝试构造一个数组。
现在,上面的代码做了我想要的——除非v.size() == 0
。在这种情况下,我得到一个包含单个“空”字符串的数组。
这是因为使用ARRAYOFCONST((""))
.
创建“空”OPENARRAY
以传递给 SuperObject 的正确方法是什么?