问题描述
我正在学习 Go 并尝试实现它。我的 JSON 数据如下所示:
private static final class ListenersHandler extends Handler {
private final WeakReference<DialogInterface> mDialog;
public ListenersHandler(Dialog dialog) {
mDialog = new WeakReference<>(dialog);
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case disMISS:
((OndismissListener) msg.obj).ondismiss(mDialog.get());
break;
case CANCEL:
((OnCancelListener) msg.obj).onCancel(mDialog.get());
break;
case SHOW:
((OnShowListener) msg.obj).onShow(mDialog.get());
break;
}
}
}
我将如何为这种数据类型创建结构? 我试过这个:
{
"site1": [
"site1_router01","site1_router02"
],"site2": [
"site2_router01","site2_router02","site2_router03","site2_router04"
],"site3": [
"site3_router01","site3_router02"
]
}
type site map[string][]string
type siterouters struct {
site
}
func main() {
var input []byte
for in := bufio.NewScanner(os.Stdin); in.Scan(); {
input = append(input,in.Bytes()...)
input = append(input,'\n')
}
// fmt.Println(string(input))
data := []siterouters{}
if err := json.Unmarshal(input,&data); err != nil {
fmt.Println(err)
return
}
}
JSON 文件可以包含任意数量的站点,以及与特定站点关联的任意数量的路由器。网站将永远是独一无二的。 谢谢。
解决方法
您创建了两个不必要的图层;如果引用的 JSON 在 [{"site":{
内,您的代码将起作用,但事实并非如此。去掉两个外层——结构体和切片——并直接解组到地图中:
data := map[string][]string{}
if err := json.Unmarshal(input,&data); err != nil {
fmt.Println(err)
return
}
fmt.Println(data)