【delphi】 JSON 操作详解(TJSONObject)

Delphi官方提供的对于JSON操作的单元是:system.JSON,delphi将JSON元素都定义为对象,注意是对象,既然是对象就需要创建,需要释放。具体如下:

本文演示 Demo 下载:SZHN_JSON.rar

Delphi JSON 常用对象
编号对象说明
1TJSONValue所有JSON类的祖先,包括以下锁有对象
2TJSONObject一个JSON对象,对应一段JSON字符串
3TJSONPair代表一个Key-Value的JSON对,包括josnString和jsonValue
4TJSONString代表一个字符串的JSON节点
5TJSONNumber代表一个数值的JSON节点,可以是整形,也可以是浮点型(日期是浮点型)
6TJSONBool代表一个布尔型的JSON节点
7TJSONArray代表一个数组型的JSON节点
8TJSONTrue表示一个TJSONBool型的值为True对象
9TJSONFalse表示一个TJSONBool型的值为False对象

本文JSON样例,下面程序使用字符串名称为JSONStr替代下面JSON字符串

{
	"name": "张大顺",
	"age": 40,
	"married": true,
	"books": [
		"《Web开发人员参考大全》",
		"《delphi深度学习》"
	],
	"organization": {
		"oname": "大中华科技",
		"oyear": 20
	}
}

1.生成SJON

原生方法:

procedure TForm1.Button4Click(Sender: TObject);
var
  jo : TJSONObject;
begin
  jo := TJSONObject.Create;
  try
    jo.AddPair('name','张大顺');
    jo.AddPair('age',TJSONNumber.Create(40));
    jo.AddPair('married', TJSONBool.Create(True));
    jo.AddPair('books',TJSONArray.Create
      .Add('《Web开发人员参考大全》')
      .Add('《delphi深度学习》'));
    jo.AddPair('organization',TJSONObject.Create
      .AddPair('oname','大中华科技')
      .AddPair('oyear',TJSONNumber.Create(20)));
    Memo2.Text := JSON_Format(jo.ToString);
  finally
    jo.Free;   //切记这里需要释放
  end;
end;

也可以使用通过Helper实现的类似SuperObject的写法,使用这个方法,需要引入单元uSZHN_JSON.pas

procedure TForm1.Button5Click(Sender: TObject);
var
  jo : TJSONObject;
begin
  jo := TJSONObject.Create;
  try
    jo.S['name'] := '张大顺';
    jo.I['age'] := 40;
    jo.B['married'] := True;
    jo.A['books'] := TJSONArray.Create;
    jo.A['books'].Add('《Web开发人员参考大全》').Add('《delphi深度学习》');

    jo.O['organization'] := TJSONObject.Create;
    jo.O['organization'].S['oname'] := '大中华科技';
    jo.O['organization'].I['oyear'] := 20;
    {
    //也可以如下:
    jo.O['organization'] := TJSONObject.Create.AddPair('oname','大中华科技');
    jo.O['organization'].I['oyear'] := 20;
    }
    Memo2.Text := JSON_Format(jo.ToString);
  finally
    jo.Free;  //切记这里需要释放
  end;
end;

2. 解析JSON

procedure TForm1.Button6Click(Sender: TObject);
var
  jo : TJSONObject;
  name : string;
  age : integer;
  married : Boolean;
  bookname : string;
  oname : string;
begin
  jo := TJSONObject.ParseJSONValue(JSONStr) as TJSONObject;
  if jo = nil then
     begin
       //解析失败,不是JSON格式的字符串
       Exit;
     end;
  try
    //获取姓名
    name := jo.S['name'];   //张大顺
    //获取年龄
    age := jo.I['age'];     //40
    married := jo.B['married'];   //true
    bookname := jo.A['books'].Items[0].ToString;  // 《Web开发人员参考大全》

    oname := jo.O['organization'].S['oname'];  // '大中华科技';
    age   := jo.O['organization'].I['oyear'];  // 20;
  finally
    jo.Free;  //切记这里需要释放
  end;
end;

3. 删除JSON项

procedure TForm1.Button7Click(Sender: TObject);
var
  jo : TJSONObject;
  name : string;
  age : integer;
  married : Boolean;
  bookname : string;
  oname : string;
begin
  jo := TJSONObject.ParseJSONValue(JSONStr) as TJSONObject;
  if jo = nil then
     begin
       //解析失败,不是JSON格式的字符串
       Exit;
     end;
  try
    //删除name
    jo.Remove('name');   //直接输入需要删除的项目名,这句没有加free是因为helper里边已经加了
    //也可以使用下面语句,注意一定要加上free,否则会产生内存泄露
    //jo.RemovePair('name').Free;    //这是原生的用法
    //删除数组中项目
    jo.A['books'].Remove(0).free;  //删除数组中的第一项:《Web开发人员参考大全》

    Memo2.Text := JSON_Format( jo.ToString);
  finally
    jo.Free;  //切记这里需要释放
  end;
end;

删除后的结果:

{
  "age": 40,
  "married": true,
  "books": 
  [
    "《delphi深度学习》"
  ],
  "organization":
  {
      "oname": "大中华科技",
      "oyear": 20
  }
}

4. JSON数组操作

样例代码一、

procedure TForm1.Button8Click(Sender: TObject);
var
  jo : TJSONObject;
  ja : TJSONArray;
begin
  jo := TJSONObject.ParseJSONValue(JSONStr) as TJSONObject;
  if jo = nil then   //如果jo不是JSON对象,直接退出
     exit;
  ja := TJSONArray.Create;
  try
    ja.Add('增加一个字符串');
    ja.Add(1024);    //增加数字1024
    ja.Add(False);    //增加布尔值 False
    ja.Add(TJSONObject.Create.AddPair('street','st 208'));  //直接增加一个对象
    jo.AddPair('数组',ja);
    Memo2.Text := JSON_Format(jo.ToString);
  finally
    jo.Free;
    //注意 ja 不需要释放,因为在释放 jo的时候系统会自动释放
  end;

end;

执行后结果:

{
  "name": "张大顺",
  "age": 40,
  "married": true,
  "books": 
  [
    "《Web开发人员参考大全》",
    "《delphi深度学习》"
  ],
  "organization":
  {
      "oname": "大中华科技",
      "oyear": 20
  },
  "数组": 
  [
    "增加一个字符串",
    1024,
    false,
    {
        "street": "st 208"
    }
  ]
}

样例代码二、

procedure TForm1.Button9Click(Sender: TObject);
var
  jo : TJSONObject;
  ja : TJSONArray;
  i : Byte;
begin
  ja := TJSONArray.Create; //创建数组对象
  try
    for i := 1 to 3 do
       begin
        jo := TJSONObject.Create;   //创建数组元素,是JSON对象
        jo.S['name'] := 'sensor' + i.ToString;
        jo.I['index']:= i;
        ja.Add(jo);       //将数组元素增加到数组中
       end;
    Memo2.Text := JSON_Fromat_Array(ja);
  finally
    ja.Free;  //注意 jo 不需要释放,因为在释放 ja的时候系统会自动释放
  end;
end;

执行结果:

[
  {
      "name": "sensor1",
      "index": 1
  },
  {
      "name": "sensor2",
      "index": 2
  },
  {
      "name": "sensor3",
      "index": 3
  }
],

总结:

  1. 作为对象内嵌元素的对象是不需要释放的,只需要释放最外对象即可;
  2. 如果删除元素,不管是删除数组中的元素还是删除JSON对象,都需要Free,否则会产生内存泄漏(测试5万次就会有明显累积);
  3. 使用TJSONObject的助手单元uSZHN_JSON.pas,操作JSON会书写更加简便; 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Delphi是一种编程语言,也是一种集成开发环境 (IDE),它提供了许多功能强大的工具和组件,包括处理JSON数据的能力。 在Delphi中,使用JSON数据的常见方式是通过TJSONObject和TJSONValue类来进行操作。TJSONObject代表一个JSON对象,可以包含多个键值对,而TJSONValue则代表一个JSON值。 要使用Delphi处理JSON数据,首先需要使用内置的JSON单元,它包含了操作JSON的类和方法。可以通过在uses子句中添加JSON单元来引入: uses ..., System.JSON; 接下来,可以使用TJSONObject类创建一个JSON对象。可以通过添加键值对来设置该对象的属性。例如,下面的代码创建了一个名为person的JSON对象,包含了name和age两个属性: var person: TJSONObject; begin person := TJSONObject.Create; person.AddPair('name', 'John'); person.AddPair('age', TJSONNumber.Create(25)); // 其他处理操作... person.Free; // 释放对象 end; 在上面的代码中,AddPair方法用于向JSON对象添加一个键值对。对于数字类型的值,可以使用TJSONNumber类来创建。 处理JSON对象后,可以使用不同的方法来获取和修改其属性值。例如,可以使用GetValue方法获取一个属性的值: var nameValue: TJSONValue; begin nameValue := person.GetValue('name'); ShowMessage(nameValue.Value); // 输出'John' end; 以上就是使用Delphi处理JSON的简单示例。通过使用TJSONObject和TJSONValue类,可以轻松地创建、访问和修改JSON数据。这样可以方便地处理从网络接口获取的JSON数据,或者构建自己的JSON数据结构。 ### 回答2: Delphi是一种面向对象的编程语言,可用于开发Windows应用程序。在Delphi中,我们可以使用JSON(JavaScript Object Notation)来处理和解析JSON数据。 首先,我们需要使用TJSONObject和TJSONValue类来创建JSON对象。可以使用AddPair方法添加键值对,也可以使用AddElement方法添加元素。例如,以下示例演示了如何创建一个简单的JSON对象: ```delphi var json: TJSONObject; begin json := TJSONObject.Create; try json.AddPair('name', 'John'); json.AddPair('age', 30); // 在此处处理JSON对象... finally json.Free; end; end; ``` 我们还可以将JSON对象保存到文件或将其转换为字符串。有两种方法可用于实现这一点。一种方法是使用ToString方法将JSON对象转换为字符串,另一种方法是使用SaveToFile方法将JSON对象保存到文件中。 ```delphi var json: TJSONObject; jsonString: string; begin // 创建JSON对象并添加键值对... // 将JSON对象转换为字符串 jsonString := json.ToString; // 将JSON对象保存到文件 json.SaveToFile('data.json'); // 在此处处理字符串或文件... end; ``` 在处理JSON数据时,我们还可以使用TJSONParser类来解析JSON字符串。通过调用Parse方法并提供要解析的JSON字符串,我们可以将其解析为JSON对象,并使用Get方法获取值。 ```delphi var json: TJSONObject; parser: TJSONParser; value: TJSONValue; begin // 创建TJSONParser对象 parser := TJSONParser.Create('{"name": "John", "age": 30}'); try // 解析JSON字符串为JSON对象 json := parser.Parse as TJSONObject; // 获取键为"name"的值 value := json.Get('name'); if value <> nil then ShowMessage(value.Value); // 获取键为"age"的值 value := json.Get('age'); if value <> nil then ShowMessage(value.Value); finally json.Free; parser.Free; end; end; ``` 以上是Delphi中使用JSON的一些基本用法。通过这些方法,我们可以创建、处理和解析JSON对象,以便在Delphi应用程序中有效地处理JSON数据。 ### 回答3: Delphi 是一种编程语言,用于开发 Windows 平台上的应用程序。Delphi 提供了丰富的库和组件,使开发者能够方便地处理 JSON 数据。 在 Delphi 中,可以使用 TJSONObject 和 TJSONValue 类来处理 JSON 数据。TJSONObject 类表示一个 JSON 对象,可以包含多个属性和值。TJSONValue 类是 TJSONObject 的基类,用于表示 JSON 值,如字符串、数字、布尔值等。 使用 Delphi 处理 JSON 数据的一般步骤如下: 1. 创建一个 TJSONObject 对象,并使用 AddPair 方法添加属性和值。例如: ``` var jsonObj: TJSONObject; begin jsonObj := TJSONObject.Create; jsonObj.AddPair('name', 'John'); jsonObj.AddPair('age', TJSONNumber.Create(25)); //... end; ``` 2. 使用 TJSONObject 的 ToString 方法将 JSON 对象转换为字符串。例如: ``` var jsonString: string; begin jsonString := jsonObj.ToString; //... end; ``` 3. 使用 TJSONObject 的 ParseJSONValue 方法将 JSON 字符串解析为 TJSONValue 对象。例如: ``` var jsonValue: TJSONValue; begin jsonValue := TJSONObject.ParseJSONValue(jsonString); //... end; ``` 4. 使用 TJSONValue 的类型转换方法,将 TJSONValue 对象转换为具体的数据类型。例如: ``` var name: string; age: Integer; begin name := (jsonValue.GetValue<string>('name')); age := (jsonValue.GetValue<Integer>('age')); //... end; ``` 以上是 Delphi 中处理 JSON 数据的基本用法。通过这些方法,开发者可以方便地序列化和反序列化 JSON 数据,并从中提取所需的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值