一直想找如何解析JSON数据的说,今天终于找到有人发帖子了。之前有人说用superobject,Tlkjson,delphi json library,delphi web unit等等。其实我是想找比较简单的解析方式。解析简单的json。下面是转载的坦然的源码。unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,DBXJSON;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
GJSONString =
'{' +
' "name": {'+
'
"A JSON Object": {' +
'
"id": "1"' +
'
},' +
'
"Another JSON Object": {' +
'
"id": "2"' +
'
}' +
' },' +
' "totalobjects": "2"' +
'}';
procedure TForm1.Button1Click(Sender: TObject);
var
LJSONObject: TJSONObject;
Value: TJSONValue;
begin
LJSONObject := nil;
try
LJSONObject := TJsonObject.Create;
Value := TJSONValue.Create;
{ convert String to JSON }
LJSONObject.Parse(BytesOf(GJSONString), 0);
Value :=LJSONObject.GetValue('name');
ShowMessage(Value.ToString);
finally
LJSONObject.Free;
end;
end;
end.
灰常好,在此谢谢博主。
但是这样处理中文的时候会出现乱码现象。我对代码稍微修改了一下:
var
jo:tjsonobject;
jv:tjsonvalue;
jsonstr:string;//要转换的json字符串
begin
jo:=nil;
jsonstr:='{"name":"流川枫","interest":"与樱木吵架"};
try
jo:=tjsonobject.create;
jo:=tjsonobject.parsejsonvalue(tencoding.utf8.getbytes(jsonstr),0) as tjsonobject;
jv:=jo.get('interest').jsonvalue;
showmessage(jv.value);
finally
jo.Free;
end;
end;
终于能转换成中文了。
下面是关于jsonobject的解析(举一反三):
procedure TForm1.Button1Click(Sender: TObject);
var
jsonstr: string;
jvalue: tjsonvalue;
jobj: tjsonobject;
jpair: tjsonpair;
jarray: tjsonarray;
begin
jsonstr:='{'name':'tom','password':'tomcat','interests':['mouse','meat']}';
jvalue := tjsonobject.ParseJSONValue
(tencoding.UTF8.GetBytes(jsonstr), 0);
try
jobj := jvalue as tjsonobject;
jpair := jobj.Get(2); // get the third json pair
jarray := jpair.JsonValue as tjsonarray; // pair value is an array ['mouse','meat']
strresult := jarray.Get(0).value; // first element of array['mouse','meat']
showmessage(strresult);//it is mouse
finally
jvalue.Free;
end;
end;