首页 文章

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

提问于
浏览
8

我正在使用Delphi 2010和 superobject 库 .

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

算法是:

  • 解析JSON并在TStringGrid中加载

  • 添加数据

  • 将所有TStringGrid数据保存到json .

需要一些例子 .

谢谢 .

3 回答

  • 21

    代码示例将以下结构提供给JSON对象,然后保存到文件:

    (*
    {
      "name": "Henri Gourvest", /* this is a comment */
      "vip": true,
      "telephones": ["000000000", "111111111111"],
      "age": 33,
      "size": 1.83,
      "adresses": [
        {
          "adress": "blabla",
          "city": "Metz",
          "pc": 57000
        },
        {
          "adress": "blabla",
          "city": "Nantes",
          "pc": 44000
        }
      ]
    }
    *)
    
    procedure SaveJson;
    var
      json, json_sub: ISuperObject;
    begin
      json := SO;
    
      json.S['name'] := 'Henri Gourvest';
      json.B['vip'] := TRUE;
      json.O['telephones'] := SA([]);
      json.A['telephones'].S[0] := '000000000';
      json.A['telephones'].S[1] := '111111111111';
      json.I['age'] := 33;
      json.D['size'] := 1.83;
    
      json.O['addresses'] := SA([]);
    
      json_sub := SO;
      json_sub.S['address'] := 'blabla';
      json_sub.S['city'] := 'Metz';
      json_sub.I['pc'] := 57000;
      json.A['addresses'].Add(json_sub);
    
      json_sub.S['address'] := 'blabla';
      json_sub.S['city'] := 'Nantes';
      json_sub.I['pc'] := 44000;
      json.A['addresses'].Add(json_sub);
    
      json.SaveTo('C:\json_out.txt');
    
      json := nil;
      json_sub := nil;
    end;
    
  • -1

    阅读帮助文件:https://github.com/hgourvest/superobject/blob/master/README.md

    然后阅读TSuperArray的来源('使用来源,卢克')

    结果如下:

    var
      obj: ISuperObject;
      a:   TSuperArray; // shortcut
    begin
      obj := TSuperObject.Create(stArray);
      // or obj := SA([]);
    
      a := obj.AsArray;
    
      a.s[0] := 'aaaa';
      a.s[1] := 'bbbb';
      a.s[3] := 'cccc';
    
      ...
    
      obj.SaveTo('File.txt');
      a := nil; obj := nil;
    
      ...
    end;
    

    帮助文件中也有引用:obj ['foo[]']:= value; //添加一个项目数组
    这表明填充数组的另一种方法(如果根对象本身不是数组) . 引用http://code.google.com/p/superobject/source/browse/tests/test_usage.dpr

    my_array := TSuperObject.Create(stArray);
        my_array.I[''] := 1; // append
        my_array.I[''] := 2; // append
        my_array.I[''] := 3; // append
        my_array.I['4'] := 5;
    

    之后,此对象数组作为属性插入到另一个对象中

    my_object := TSuperObject.Create(stObject);
        my_object.I['abc'] := 12;
       // my_object.S['path.to.foo[5]'] := 'bar';
        my_object.B['bool0'] := false;
        my_object.B['bool1'] := true;
        my_object.S['baz'] := 'bang';
        my_object.S['baz'] := 'fark';
        my_object.AsObject.Delete('baz');
        my_object['arr'] := my_array;
    
  • 6

    一个非常好的库是LkJson:http://sourceforge.net/projects/lkjson/

    解析:

    var jsText:String; jsObj:TlkJSONobject;开始

    jsObj:=TlkJSON.ParseText(jsText) as TlkJSONobject;
    

    将其转换回文本:

    jsText := TlkJSON.GenerateText(jsObj);
    

相关问题