面试题答案
一键面试package main
import (
"encoding/json"
"fmt"
)
func sumNumbersInJSONArray(data []byte) (float64, error) {
var result float64
var v interface{}
if err := json.Unmarshal(data, &v); err != nil {
return 0, err
}
switch value := v.(type) {
case []interface{}:
for _, item := range value {
sum, err := sumItem(item)
if err != nil {
return 0, err
}
result += sum
}
default:
return 0, fmt.Errorf("input is not a JSON array")
}
return result, nil
}
func sumItem(item interface{}) (float64, error) {
switch value := item.(type) {
case float64:
return value, nil
case []interface{}:
var result float64
for _, subItem := range value {
sum, err := sumItem(subItem)
if err != nil {
return 0, err
}
result += sum
}
return result, nil
case map[string]interface{}:
var result float64
for _, subItem := range value {
sum, err := sumItem(subItem)
if err != nil {
return 0, err
}
result += sum
}
return result, nil
default:
return 0, nil
}
}
你可以使用以下方式调用这个函数:
func main() {
jsonData := []byte(`[1, 2, "abc", true, {"key": 3}, [4, 5]]`)
sum, err := sumNumbersInJSONArray(jsonData)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("Sum:", sum)
}
}