Go lang json解码映射

时间:2017-07-25 09:25:54

标签: json dictionary go

如何将每个元素映射到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”]。

任何建议或提示都会有所帮助。感谢。

1 个答案:

答案 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"`
}