如何将每个元素映射到struct或map。基于具有不同类型的json数据。
procedure TForm2.Button1Click(Sender: TObject);
var
Handle: Integer;
LibraryProc :procedure();stdcall;
begin
Handle := LoadLibrary('dllka.dll');
if Handle <> 0 then
begin
try
LibraryProc := GetProcAddress(Handle,'RunScript');
if @LibraryProc = nil then
raise Exception.Create('erorr')
else
LibraryProc();
finally
Showmessage('Before free library');
FreeLibrary(Handle);
Handle := 0;
LibraryProc := nil
end
end;
Showmessage('ok');
end;
我已经尝试过了。但是没有按预期工作。
{
profile: {
execution_time: 34,
server_name: "myServer.net"
},
result: "ok",
ret: [
{
alias: "asda444444",
all_parents: [
123,
2433369,
243628,
2432267,
62
],
bankrupt: false,
block: false,
card: null
}
]
}
通过这种方式,我只能得到o [“ret”]。我真正想要的是o [“ret”] [“alias”]或o [“ret”] [“all_parents”]。
任何建议或提示都会有所帮助。感谢。
答案 0 :(得分:2)
您可以使用map[string]interface{}
结果并对相关部分进行类型转换,例如:
o["ret"].([]interface{})
将获得数组并继续如此。但是,这很乏味,您还需要检查设置的值等。
相反,我建议您使用方便的JSON to Go tool,它可以自动生成结构定义,以便在给定输入JSON时粘贴到Go代码中。
显然,您可能需要修改它以满足您的需求,因为您知道输入可以采用的有效格式。但是,这个工具可以节省大量乏味的样板代码编写!
例如,对于上面的JSON,它会生成:
type AutoGenerated struct {
Profile struct {
ExecutionTime int `json:"execution_time"`
ServerName string `json:"server_name"`
} `json:"profile"`
Result string `json:"result"`
Ret []struct {
Alias string `json:"alias"`
AllParents []int `json:"all_parents"`
Bankrupt bool `json:"bankrupt"`
Block bool `json:"block"`
Card interface{} `json:"card"`
} `json:"ret"`
}