mcjson_根据InPath路径,查询mcjson中的值 如果该路径不存在,则创建该路径并赐予‘‘空值

go 复制代码
//根据InPath路径,查询mcjson中的值 如果该路径不存在,则创建该路径并赐予''空值
// InJson  json数据
//查询json路径格式 InPath:='601988\策略名1\日期5\参数2';
function TForm1.GegMcJsonValue(var InJson:TMcJsonItem;InPath:string): Variant;
var
//     InJson: TMcJsonItem;
  List1:TStringList;
   JSPath:string;
   str1,str2:string;
   ifor1:Integer;
 begin
//      InJson := TMcJsonItem.Create;
  Result :='';
   if InJson.Path(InPath)<>nil then  begin
     Result :=InJson.Path(InPath).Value;
     exit;
   end;
  try
    List1:=TStringList.Create;
  //     InJson.AsJSON := '{"601988":{"策略名1": {"日期1":{"参数1":1,"参数2":1}}}}';
    str1:=InPath;//'601988\策略名1\日期5\参数2';
    List1.Delimiter := '\';
    List1.DelimitedText :=str1;
    str1:=List1[0];
     for ifor1:=0 to List1.Count -1 do begin
       if (ifor1=0) and (InJson.Path(str1)=nil) then
       begin
         InJson.add(List1[0]).AsJSON:='';
         continue;
       end;
      if ifor1>0  then begin
         str2:=str1;
         str1:=Format('%s\%s',[str1,List1[ifor1]]);
         if InJson.Path(str1)=nil then
         begin
           InJson.Path(str2).Add(List1[ifor1]).AsJSON:='';
         end;
       end;
     end;
   finally
    List1.Free;
  end;
end;

调用方法

go 复制代码
procedure TForm1.btn5Click(Sender: TObject);
var
  N: TMcJsonItem;
  str1:string;
  outvar:Variant;
begin

  N := TMcJsonItem.Create();
 N.AsJSON:='{"601988":{"策略名1": {"日期1":{"参数1":1,"参数2":888}}}}';
  str1:='601988\策略名1\日期5\参数2';
  GegJsonValue(N,str1);
  str1:='601988\策略名1\日期5\参数1';
  GegJsonValue(N,str1);
   str1:='601988\策略名1\日期1\参数2';
 outvar:= GegJsonValue(N,str1)+2;
  mmo2.Text:=N.AsJSON;
  mmo1.Lines.Add(outvar);
  n.Free;
end;

//<<==========================================

//循环读取key

go 复制代码
//循环读取key
procedure TForm1.btn6Click(Sender: TObject);
var
  N,m: TMcJsonItem;
  str1,str2,str3:string;
  ifor1,i1:Integer;
begin 
    N := TMcJsonItem.Create;
    m := TMcJsonItem.Create;
    try
      str1:='{"A1":{"B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}},"B2":{"C1":{"D1":5,"D2":6},"C2":{"D1":7,"D2":8}},"B3":{"C1":{"D1":9,"D2":10},"C2":{"D1":11,"D2":12}}}}';
      mmo1.Text:=str1;
      N.AsJSON:=str1;
      str2:='A1';
      i1:=  n.Path('A1').Count;
      mmo1.Lines.Add(Format('A1下有%d条数据',[i1]));
        for ifor1:=0 to i1-1 do begin
         str3 := n.Path('A1').Keys[ifor1];  //获取key的名称
         mmo1.Lines.Add(Format('A1下的Keys%d = %s ',[ifor1,str3]) );
 
          str1 :=Format('%S.%S',[str2,str3]);
           mmo1.Lines.Add(str1);
          if N.Path(str1) <> nil then  begin
            try
            str1 := N.Path(str1).AsString;
            mmo1.Lines.Add(Format('找到指定%s值 = %s ',[str2,str1]) ) ;
            except
            str1 := N.Path(str1).AsJSON;
            mmo1.Lines.Add(Format('找到相关%s的JSON = %s ',[str2,str1]) ) ;
            end;
          end; 
        end;
    finally
     N.Free;
    end;
end;
javascript 复制代码
返回值
{"A1":{"B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}},"B2":{"C1":{"D1":5,"D2":6},"C2":{"D1":7,"D2":8}},"B3":{"C1":{"D1":9,"D2":10},"C2":{"D1":11,"D2":12}}}}
A1下有3条数据
A1下的Keys0 = B1 
A1.B1
找到相关A1的JSON = "B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}} 
A1下的Keys1 = B2 
A1.B2
找到相关A1的JSON = "B2":{"C1":{"D1":5,"D2":6},"C2":{"D1":7,"D2":8}} 
A1下的Keys2 = B3 
A1.B3
找到相关A1的JSON = "B3":{"C1":{"D1":9,"D2":10},"C2":{"D1":11,"D2":12}} 

//>>==========================================

//<<==========================================

//读取json的值,路径必需指定到最终位置

go 复制代码
//读取json的值,路径必需指定到最终位置
procedure TForm1.btn7Click(Sender: TObject);
var
  N: TMcJsonItem;
  str1:string;
begin
  str1:='{"A1":{"B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}},"B2":{"C1":{"D1":5,"D2":6},"C2":{"D1":7,"D2":8}}}}';
  mmo1.Text:=str1;
  N := TMcJsonItem.Create;
  try
    N.AsJSON :=str1;
    str1 :=N.Path('A1.B1.C2.D2').AsString;//  str1 :=N['a']['B1'].AT(1).AsString;    str1 :=N['a']['B1']['k2'].AsString;
    mmo1.Lines.Add(Format('A1.B1.C2.D2 = %s ',[str1]) );
    str1 :=N.Path('A1.B1.C2.D2').AsString;
    mmo1.Lines.Add(Format('A1.B1.C2.D2= %s ',[str1]) );
    str1 :=N.Path('A1').Items[1].Items[1].Items[0].AsString; //str1 :=N.Path('a').AT(1).AT(0).AsString;//  str1 :=N['a']['B1'].AT(1).AsString;    str1 :=N['a']['B1']['k2'].AsString;
    mmo1.Lines.Add(Format('A1.B2.C2.D1= %s ',[str1]));
    str1 :=N.AT(0).AT(1).AT(1).AT(0).AsString; //str1 :=N.Path('a').AT(1).AT(0).AsString;//  str1 :=N['a']['B1'].AT(1).AsString;    str1 :=N['a']['B1']['k2'].AsString;
    mmo1.Lines.Add(Format('A1.B2.C2.D1= %s ',[str1]) );
  finally
   N.Free;
  end;
  
end;
javascript 复制代码
返回值
{"A1":{"B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}},"B2":{"C1":{"D1":5,"D2":6},"C2":{"D1":7,"D2":8}}}}
A1.B1.C2.D2 = 4 
A1.B1.C2.D2= 4 
A1.B2.C2.D1= 7 
A1.B2.C2.D1= 7 

//>>==========================================

//<<==========================================

//找到指定路径值,找到相关路径s的JSON

go 复制代码
//找到指定路径值,找到相关路径s的JSON
procedure TForm1.btn8Click(Sender: TObject);
var
  N: TMcJsonItem;
  str1,str2:string;
begin
  str1:='{"A1":{"B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}},"B2":{"C1":{"D1":5,"D2":6},"C2":{"D1":7,"D2":8}}}}';
  mmo1.Text:=str1;
  N := TMcJsonItem.Create;
  try
    N.AsJSON :=str1;
      str1 :='A1.B1';
      if N.Path(str1) = nil then
       mmo1.Lines.Add(Format('N = %s ',[str1]) ) ELSE  mmo1.Lines.Add(Format('Y = %s ',[str1]) );

      //<<找到指定值
      str1 :='A1.B1.C2.D2';
      str2:=str1;
     if N.Path(str1) <> nil then  begin
       try
         str1 := N.Path(str1).AsString;
         mmo1.Lines.Add(Format('找到指定%s值 = %s ',[str2,str1]) ) ;
       except
         str1 := N.Path(str1).AsJSON;
         mmo1.Lines.Add(Format('找到相关%s的JSON = %s ',[str2,str1]) ) ;
       end;
     end;
    //>>

     //<<找到相关的JSON
       str1 :='A1.B1'; str2:=str1;
     if N.Path(str1) <> nil then  begin
      try
         str1 := N.Path(str1).AsString;
         mmo1.Lines.Add(Format('找到指定%s值 = %s ',[str2,str1]) ) ;
       except
         str1 := N.Path(str1).AsJSON;
         mmo1.Lines.Add(Format('找到相关%s的JSON = %s ',[str2,str1]) ) ;
       end;
     end;
     //>>
  finally
     N.Free;
  end;    
end;
javascript 复制代码
返回值
{"A1":{"B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}},"B2":{"C1":{"D1":5,"D2":6},"C2":{"D1":7,"D2":8}}}}
Y = A1.B1 
找到指定A1.B1.C2.D2值 = 4 
找到相关A1.B1的JSON = "B1":{"C1":{"D1":1,"D2":2},"C2":{"D1":3,"D2":4}} 

//>>==========================================

相关推荐
pcplayer2 小时前
非常好用的 Excel 读写控件
excel·delphi·office
月巴月巴白勺合鸟月半10 天前
从 Delphi 到 FMX:Borland/Embarcadero 跨平台开发三十年兴衰史
跨平台·delphi
START_GAME16 天前
Delphi 10.3安装与辅助工具uniGUI 配置指南
delphi·delphi10.3
专注VB编程开发20年22 天前
delphi死嗑Pascal冷门编程语言,Borland不认可 “通用多语言 IDE”,认为 “专有语言才是护城河”
开发语言·ide·delphi
专注VB编程开发20年22 天前
Delphi 的VCL控件库无法公开给其他编程语言调用
开发语言·delphi
qqww1551 个月前
DelphiSpeedUp 介绍
delphi
xyzhan1 个月前
使用Delphi开发混凝土生产车间自动化过程控制系统的仿真系统
运维·物联网·自动化·delphi·仿真·混凝土车间
pcplayer2 个月前
Delphi程序和大模型交互之二
人工智能·ai·大模型·agent·delphi
xyzhan2 个月前
RAD Studio Amalthea Delphi 13.1 Beta深度解析:Delphi重磅更新,原生支持Windows ARM64EC
windows·delphi·rad studio·c++ builder·delphi 13
delphi 三层源码框架3 个月前
delphi发送SSL 465端口邮件
ssl·delphi·发送邮件·indy 465端口