我想判断json类型,但它总是返回“我不知道类型map [string] interface {}!”,如何解决它。
=============================================== ==========================
rotateCard(){
var $card = $("#USE ID NOT THIS FOR SELECTOR").closest('.card-container');
console.log($card);
if($card.hasClass('hover')){
$card.removeClass('hover');
} else {
$card.addClass('hover');
}
}
答案 0 :(得分:0)
go JSON unmarshaler不了解类型,因为您可以将结果存储到interface{}
值这一事实:
func Unmarshal(data []byte, v interface{}) error
// "v" can be any type -------^
因此,您可以使用unmarshaler填充结构并确定结果是否有效。
在您的示例中,您似乎正在尝试从HTTP响应中解组remoteCardInfo
。为此,您应该将一个空的remoteCardInfo结构解组,并确定是否填充了必填字段。
例如,假设您期望JSON文档如此:
{
"sn": "123",
"ip": "0.0.0.0",
"mac": "ff:ff:ff:ff:ff:ff"
}
然后你应该定义你的“remoteCardInfo”结构如下:
type remoteCardInfo struct {
Sn string `json:"sn"`
RemoteCardIp string `json:"ip"`
RemoteCardMac string `json:"mac"`
}
然后解组并验证它:
func getRemoteCardInfo(bs []byte) (*remoteCardInfo, error) {
rci := remoteCardInfo{}
err := json.Unmarshal(bs, &rci)
if err != nil {
return nil, err
}
// Validate the expected fields
if rci.Sn == "" {
return nil, fmt.Errorf(`missing "sn"`)
}
if rci.RemoteCardIp == "" {
return nil, fmt.Errorf(`missing "ip"`)
}
if rci.RemoteCardMac == "" {
return nil, fmt.Errorf(`missing "mac"`)
}
return &rci, nil
}
当然,您可以按照自己喜欢的方式验证字段,但要记住的主要事情是,unmarshaler只能确保输入字节数组是有效的JSON文档,并将文档中的字段填充到由值定义的字段。
它无法告诉您JSON文档所代表的对象的“类型”。