gpt4 book ai didi

delphi - SuperObject 无法处理空字符串

转载 作者:行者123 更新时间:2023-12-03 15:54:47 25 4
gpt4 key购买 nike

一些 JSON 序列化器返回 null对于空字符串数据字段,例如

{
"searchtext": null,
"moretext": "contains something",
"bookdate": 1377468000000,
"empid": 12345,
"listtype": 1
}

我正在使用 SuperObject 创建 ISuperObject:

var
FJSONRequest: ISuperObject;
then
FJSONRequest := SO(Request.Content); // Webservice request

这将返回一个对象,该对象的字符串包含文本 'null' .

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

在我深入研究 980 行分词器例程之前,有人有解决方案吗?

我正在思考(要么/或):

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

  • 返回空字符串

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

FJSONRequest := SO(StringReplace(Request.Content,': null,',':,',[rfReplaceAll]));  

因为我只需要处理来 self 们一位开发人员的应用程序的请求,但这并不是万无一失的。
(不,他无法抑制 null 因为 there's a bug in the way Mono handles his datacontract 。)

顺便说一句,我正在经历the behaviour mentioned here ,但在 SuperObject 代码的另一部分中,因此该解决方法不起作用。

最佳答案

下载部分的官方1.2.4 ZIP文件http://code.google.com/p/superobject/downloads/list日期为 2010 年,但 http://code.google.com/p/superobject/source/browse 中的各个文件截至 2012 年 10 月都有更新。

如果您转到最后一个 URL 并单击下载 zip,您就可以检索它们。

这些更新的文件允许您使用特殊情况 null

如果省略字符串值周围的引号,代码仍然是“宽容的”:

{
"bookdate": 1377554400000,
"searchtext": a,
"listtype": 1
}

但它现在可以处理特殊情况

{
"bookdate": 1377554400000,
"searchtext": null,
"listtype": 1
}

好像是这样

{
"bookdate": 1377554400000,
"searchtext": ,
"listtype": 1
}

{
"bookdate": 1377554400000,
"listtype": 1
}

[不要意外输入 nilNULL]

此版本支持 VER230 (Delphi XE2) [请注意,“官方”1.2.4 甚至无法在更新的 Delphi 版本上编译],因此对于更高版本的 Delphi,您必须修补编译器指令。

它还修复了以下问题:

  • 当浮点值碰巧具有精确的整数值时,JSON 将具有尾随句点:

    {“浮点值”:4。}

    此问题现已修复:

    {“浮点值”:4}

  • 在闰年切换到夏令时时发生日期时间转换错误 - 是的,晦涩难懂。
    {$IFDEF WINDOWSNT_COMPATIBILITY}

  • 包围的代码部分存在错误

请注意,这仍然是默认定义的,我建议您禁用该定义,例如与 {.$IFDEF WINDOWSNT_COMPATIBILITY} [现在谁需要在 Windows NT 上运行?],它让操作系统处理日期时间转换:

{$ELSE}
function TzSpecificLocalTimeToSystemTime(
lpTimeZoneInformation: PTimeZoneInformation;
lpLocalTime, lpUniversalTime: PSystemTime): BOOL; stdcall; external 'kernel32.dll';

function SystemTimeToTzSpecificLocalTime(
lpTimeZoneInformation: PTimeZoneInformation;
lpUniversalTime, lpLocalTime: PSystemTime): BOOL; stdcall; external 'kernel32.dll';
{$ENDIF}

关于delphi - SuperObject 无法处理空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18445280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com