27 lines
392 B
Go
27 lines
392 B
Go
package sql
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
func ParseJSON(raw any, dest any) error {
|
|
var (
|
|
data []byte
|
|
)
|
|
|
|
if b, ok := raw.([]byte); ok {
|
|
data = b
|
|
} else if s, ok := raw.(string); ok {
|
|
data = []byte(s)
|
|
} else if raw == nil {
|
|
return nil
|
|
}
|
|
|
|
if err := json.Unmarshal(data, dest); err != nil {
|
|
return fmt.Errorf("can not scan JSON into %T: %w", dest, err)
|
|
}
|
|
|
|
return nil
|
|
}
|