Go Credential
要在 Go 中接收和处理这样的 JSON 数据,你需要定义一个结构体来匹配 JSON 的结构。以下是一个示例代码,展示如何定义结构体并解析 JSON 数据:
package main
import (
"encoding/json"
"fmt"
"log"
)
// 定义结构体来匹配 JSON 数据
type Response struct {
ClientDataJSON string `json:"clientDataJSON"`
AttestationObject string `json:"attestationObject"`
Transports []string `json:"transports"`
}
type AuthenticatorData struct {
ID string `json:"id"`
RawID string `json:"rawId"`
Type string `json:"type"`
AuthenticatorAttachment string `json:"authenticatorAttachment"`
Response Response `json:"response"`
}
func main() {
// 示例 JSON 数据
jsonData := `{
"id": "n792QEA0uvTc9GPuSfxlww",
"rawId": "n792QEA0uvTc9GPuSfxlww",
"type": "public-key",
"authenticatorAttachment": "platform",
"response": {
"clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiYWF1MHRhRGVTOFlxS2lBZmpTVzY2USIsIm9yaWdpbiI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMiIsImNyb3NzT3JpZ2luIjpmYWxzZX0",
"attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViUSZYN5YgOjGh0NBcPZHZgW4_krrmihjLHmVzzuoMdl2NdAAAAAOqbjWZNAR0hPOS2tIy1ddQAEJ-_dkBANLr03PRj7kn8ZcOlAQIDJiABIVggsWzb2WHemxoDZF-E6bsDsfCZfM4h5SR8xakdkNYNtToiWCDkmTh3CPorbOn56MO3VeHImgMOOGWjSSqJml86eQqJjg",
"transports": [
"hybrid",
"internal"
]
}
}`
var authData AuthenticatorData
// 解析 JSON 数据
err := json.Unmarshal([]byte(jsonData), &authData)
if err != nil {
log.Fatalf("Error parsing JSON: %v", err)
}
// 输出解析后的数据
fmt.Printf("ID: %s\n", authData.ID)
fmt.Printf("RawID: %s\n", authData.RawID)
fmt.Printf("Type: %s\n", authData.Type)
fmt.Printf("AuthenticatorAttachment: %s\n", authData.AuthenticatorAttachment)
fmt.Printf("ClientDataJSON: %s\n", authData.Response.ClientDataJSON)
fmt.Printf("AttestationObject: %s\n", authData.Response.AttestationObject)
fmt.Printf("Transports: %v\n", authData.Response.Transports)
}
说明
- 结构体定义:
AuthenticatorData和Response结构体用于匹配 JSON 的层次结构。 - JSON解析:使用
json.Unmarshal将 JSON 字符串解析为结构体。 - 字段标签:使用
json:"fieldName"标签来指定 JSON 字段与结构体字段之间的映射关系。