标签: superobject

如何使用SuperObject调用在Delphi中使用Object作为参数的方法?

我们可以使用SuperObject库通过名称调用某个对象的方法,并使用SOINvoker方法将其参数作为json字符串给出,就像在这个答案中一样

我想知道如何将创建的对象作为参数发送.我试着像发送它一样

LObjectList := TObjectList.Create;
LSuperRttiCtx := TSuperRttiContext.Create;
LSuperObjectParameter := LObjectList.ToJson(LSuperRttiCtx);

SOInvoke(MyInstantiatedObject, 'MyMethod', LSuperObjectParameter);
Run Code Online (Sandbox Code Playgroud)

但在MyMethod内部,LObjectList引用丢失了.

我究竟做错了什么?

superobject库可以在这里下载

delphi reflection rtti dynamicmethod superobject

9
推荐指数
1
解决办法
1847
查看次数

如何使用SuperObject lib在Delphi中创建JSON文件?

我正在使用Delphi 2010和superobject库.

我已经了解如何解析json文件,但我不知道如何创建json?

算法是:

  1. 解析JSON并在TStringGrid中加载
  2. 添加数据
  3. 将所有TStringGrid数据保存到json.

需要一些例子.

谢谢.

delphi json superobject

9
推荐指数
2
解决办法
2万
查看次数

Delphi/SuperObject - 访问子节点

我的服务器有以下JSON:

{
   "userid":"12",
   "username":"TestChar",
   "logged":"yes",
   "status":"Premium User",
   "areas":{
      "SERVICEAREA_XX1":{
         "id":"1",
         "area":"SERVICEAREA_XX1",
         "version":"3000",
         "usr_group":"0"
      },
      "SERVICEAREA_XX2":{
         "id":"2",
         "area":"SERVICEAREA_XX2",
         "version":"31000",
         "usr_group":"0"
      },
      "SERVICEAREA_XX3":{
         "id":"3",
         "area":"SERVICEAREA_XX3",
         "version":"2000",
         "usr_group":"1"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

使用SuperObjects,我可以获得"SERVICEAREA"的计数

ob['areas'].AsObject.count
Run Code Online (Sandbox Code Playgroud)

我现在如何才能访问不同"SERVICEAREA"的元素?

谢谢你的帮助...

delphi json superobject

7
推荐指数
2
解决办法
4072
查看次数

JUST SHARE - 使用delphi SuperObject将MySQL DataSet转换为Json格式

只是分享我使用Delphi SuperObject使用Json的经验

我的想法是如何轻松地将我的查询结果转换为json格式.

我使用字符串来表示所有数据格式(包括BLOB,DATE,DATETIME).将来,json文件可以轻松导入数据库.

我不是从头开始编写代码,我只是根据自己的需要进行了一些修改

这是代码:

function TTableJSon.CreateJsonValueByFieldMySql(Json: ISuperObject;
  Field: TField): Boolean;
var
  JsonTyp, FieldTyp : string;
  tmpStr : string;
begin
  Result := False;
  if Field Is TDateField then begin
      Json.O[Field.FieldName] := SO('"'+FormatDateTime('yyyy-mm-dd',Field.AsDateTime)+'"')
  end else if Field Is TDateTimeField then begin
      Json.O[Field.FieldName] := SO('"'+FormatDateTime('yyyy-mm-dd hh:nn:ss',Field.AsDateTime)+'"')
  end else if Field is TMemoField then begin
      Json.S[Field.FieldName] := EncodeString(Field.AsString)
  end else if Field is TBlobField then begin
      Json.S[Field.FieldName] := EncodeString(Field.AsString)
  end else if Field is TFloatField then begin
      Json.O[Field.FieldName] …

delphi json superobject

6
推荐指数
0
解决办法
3382
查看次数

如何使用SuperObject序列化包含点(例如IP地址)的JSON密钥?

我正在尝试保存JSON,其中IP是关键.预期的JSON结果是:

{"SnmpManagers":[{"10.112.25.235":162}]}
Run Code Online (Sandbox Code Playgroud)

Delphi SuperObject代码:

const
  IpAddr = '10.112.25.235';
  Port = 162;
var
  tmp: TSuperObject;
begin
  tmp := TSuperObject.Create;
  tmp.I[IpAddr] := Port;
  Json.A['SnmpManagers'].Add(tmp);
end;
Run Code Online (Sandbox Code Playgroud)

SuperObject将点解析为JSON对象的路径分隔符:

{"SnmpManagers":[{"10":{"112":{"25":{"235":162}}}}]}
Run Code Online (Sandbox Code Playgroud)

如何使用SuperObject正确地将IP保存为JSON密钥?

delphi parsing json ip-address superobject

6
推荐指数
1
解决办法
440
查看次数

为什么我的代码不能编译,而是获取E2506接口部分声明的参数化类型的方法不能使用本地符号

我正在使用Delphi XE.

以下单元无法使用此错误进行编译:

[DCC Error] GTSJSONSerializer.pas(27): E2506 Method of parameterized type declared 
   in interface section must not use 
   local symbol 'TSuperRttiContext.AsJson<GTSJSONSerializer.TGTSJSONSerializer<T>.T>'
Run Code Online (Sandbox Code Playgroud)

这是为什么?有解决方法吗?

unit GTSJSONSerializer;

interface

type
   TGTSJSONSerializer<T> = class
     class function SerializeObjectToJSON(const aObject: T): string;
     class function DeserializeJSONToObject(const aJSON: string): T;
   end;

implementation

uses
        SuperObject
      ;

class function TGTSJSONSerializer<T>.SerializeObjectToJSON(const aObject: T): string;
var
  SRC: TSuperRttiContext;
begin
  SRC := TSuperRttiContext.Create;
  try
    Result := SRC.AsJson<T>(aObject).AsString;
  finally
    SRC.Free;
  end;
end;

class function TGTSJSONSerializer<T>.DeserializeJSONToObject(const aJSON: string): T;
var
  LocalSO: ISuperObject;
  SRC: TSuperRttiContext;
begin
  SRC …
Run Code Online (Sandbox Code Playgroud)

delphi generics compiler-errors delphi-xe superobject

5
推荐指数
1
解决办法
723
查看次数

Delphi Superobject,json的通用列表

我有一个带有一些TObjectList <>的对象 - 我尝试使用帮助形式SuperObject编码为JSON的字段.

TLogs = TObjectList<TLog>;
TMyObject = class(TObject)
private
  FLogs: TLogs;
end;
Run Code Online (Sandbox Code Playgroud)

在SuperObjects代码内部,有一个ToClass过程,迭代字段并将它们添加到json结果中.

在此循环中,检查TRttiFields FieldType.如果它为零,则跳过该对象.

for f in Context.GetType(Value.AsObject.ClassType).GetFields do
  if f.FieldType <> nil then
  begin
    v := f.GetValue(value.AsObject);
    result.AsObject[GetFieldName(f)] := ToJson(v, index);
  end
Run Code Online (Sandbox Code Playgroud)

我的通用列表字段的FieldType为nil.为什么?

如何让SuperObject序列化我的对象列表?

delphi generics json rtti superobject

4
推荐指数
1
解决办法
3050
查看次数

SuperObject - 从带有"."的字段名解析数据.文字

我最近在解析JSON时遇到了问题.您可以看到,在使用CloudFlare Client Interface API时,我想查找特定IP的"威胁评级".问题是由于API的设计,格式是这样的;

{
 response: {
            xxx.xxx.xxx.xxx: <value>,
            calls_left: 299
            },
 result: "success",
 msg: null
}
Run Code Online (Sandbox Code Playgroud)

xxx.xxx.xxx.xxx表示从中检索数据所需的字段名称.马上,你可能会看到我面临的问题; 假设解析字符串中的点字符是当前路径中的子级别.

<value>代表IP的实际评级.但是,从它返回的格式和数据类型会有所不同.对于不是威胁的IP,或者没有威胁等级的IP,它将false作为布尔值返回.在搜索引擎爬虫上,它返回"SE:<var>"(其中<var>是数值)字符串.在已知威胁上,它返回"BAD:<var>"(其中<var>是数值).因此,我不能依赖于返回的已知数据类型.

然而,主要问题是,由于字段名称中的点,尝试从该字段读取值显然会失败.

delphi json cloudflare firemonkey superobject

4
推荐指数
1
解决办法
1727
查看次数

SuperObject - 全部提取

如何从通用JSON获取所有'id'成员值.不知道它的结构.因为它非常复杂而且它有很多子对象.它必须循环遍历所有子对象.

对于那些继续询问JSON示例的人来说再次.我的问题是如何在我的案例"id"中从任何具有此成员的通用JSON中提取成员值.

delphi json delphi-xe2 superobject

4
推荐指数
1
解决办法
2723
查看次数

如何检查SuperObject中是否存在特定元素?

我广泛使用SuperObjectJSON库.我需要能够检查对象中是否存在特定元素.我可以检查一个元素的值,例如一个不存在的整数返回0.但是,0如果它存在的话,它是可能的值之一 - 所以我不能依赖观察0元素的存在.我检查了ISuperObject可以做到这一点的for方法(例如我希望有类似的东西ISuperObject.Exists(const S: String): Boolean;),但是看不到这样的东西.

如何检查JSON对象中是否存在特定元素?

delphi json superobject

4
推荐指数
2
解决办法
2931
查看次数