我一直在努力解决这个问题,做一些简单的事情似乎花了太长时间. 我有这样一个文件: [ { "FirstName": "Oleg", "Surname": "Buckley" }, { "FirstName": "Amery", "Surname": "Mcmillan" }, { "FirstName": "Denton", "S
我有这样一个文件:
[ { "FirstName": "Oleg", "Surname": "Buckley" }, { "FirstName": "Amery", "Surname": "Mcmillan" }, { "FirstName": "Denton", "Surname": "Burnett" ....
我希望能够将它们读入我的程序.到目前为止,我已经完成了这个非常小的功能:
function GetGeneratedNames: TArray<string>; var fileName: TFileName; JSONValue, jv: TJSONValue; JSONArray: TJSONArray; jo: TJSONObject; pair: TJSONPair; begin result := nil; filename := ExePath + 'Names.json'; JSONValue := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TFile.ReadAllText(filename)), 0); if JSONValue is TJSONArray then begin for jv in (JSONValue as TJSONArray) do begin if jv is TJSONObject then begin jo := jv as TJSONObject; for pair in jo do begin Append(result, jo.Value); end; end; end; end; end{ GetGeneratedNames};
麻烦的是,它返回一个空字符串数组.谁能指出我正确的方向?
TIA
标记
// XE5- version uses System.SysUtils, Data.DBXJSON, System.IOUtils; function GetGeneratedNames: TArray<string>; var fileName: TFileName; JSONValue, jv: TJSONValue; begin fileName := TPath.Combine(ExePath, 'Names.json'); JSONValue := TJSONObject.ParseJSONValue(TFile.ReadAllText(fileName)); try if JSONValue is TJSONArray then begin for jv in TJSONArray(JSONValue) do begin Append(Result, (jv as TJSONObject).Get('FirstName').JSONValue.Value); Append(Result, (jv as TJSONObject).Get('Surname').JSONValue.Value); end; end; finally JSONValue.Free; end; end { GetGeneratedNames }; // XE6+ version uses System.SysUtils, System.JSON, System.IOUtils; function GetGeneratedNames: TArray<string>; var fileName: TFileName; JSONValue, jv: TJSONValue; begin fileName := TPath.Combine(ExePath, 'Names.json'); JSONValue := TJSONObject.ParseJSONValue(TFile.ReadAllText(fileName)); try if JSONValue is TJSONArray then begin for jv in TJSONArray(JSONValue) do begin Append(Result, jv.GetValue<string>('FirstName')); Append(Result, jv.GetValue<string>('Surname')); end; end; finally JSONValue.Free; end; end { GetGeneratedNames };