json - 从 Json 中的数组中提取值
问题描述
我正在尝试获得“靴子”的价值
我的功能主要
varjson:=`{
"identifier": "1",
"name": "dumbname",
"person": {
"items": null,
"inventory": [
{
"T-shirt": "black",
"Backpack": {
"BigPocket": {
"spell": "healing",
"boots": "speed",
"shampoo": "Head & Shoulders"
}
}
}
],
"Pockets": null
}
}`
var res map[string]interface{}
json.Unmarshal([]byte(varjson), &res)
test(res)
测试功能
func test(t interface{}) {
switch reflect.TypeOf(t).Kind() {
case reflect.Slice:
s := reflect.ValueOf(t)
for i := 0; i < s.Len(); i++ {
fmt.Println(s.Index(i))
}
}
}
但是当我编译时,我什么也得不到如果有另一种方法来获取 Json 中的“启动”值吗?
解决方案
假设您可以根据您的评论使用类型(谢天谢地,完全同意 colm,试图反映结构是粗糙的。
一旦你有了一个类型,它就超级容易导航。
特别fmt.Println(res.Person.Inventory[0].Backpack.BigPocket.Boots)
是会给你带来靴子的价值。请记住 Inventory 是一个切片,因此您可能需要对其进行迭代,而在这里我直接访问它,如果 Inventory 为空或有其他元素,这将是不好的。
package main
import (
"encoding/json"
"fmt"
)
type AutoGenerated struct {
Identifier string `json:"identifier"`
Name string `json:"name"`
Person struct {
Items interface{} `json:"items"`
Inventory []struct {
TShirt string `json:"T-shirt"`
Backpack struct {
BigPocket struct {
Spell string `json:"spell"`
Boots string `json:"boots"`
Shampoo string `json:"shampoo"`
} `json:"BigPocket"`
} `json:"Backpack"`
} `json:"inventory"`
Pockets interface{} `json:"Pockets"`
} `json:"person"`
}
func main() {
varjson := `{
"identifier": "1",
"name": "dumbname",
"person": {
"items": null,
"inventory": [
{
"T-shirt": "black",
"Backpack": {
"BigPocket": {
"spell": "healing",
"boots": "speed",
"shampoo": "Head & Shoulders"
}
}
}
],
"Pockets": null
}
}`
var res AutoGenerated
json.Unmarshal([]byte(varjson), &res)
fmt.Println(res.Person.Inventory[0].Backpack.BigPocket.Boots)
}
在您的原始文件中,错误的是您的 switch 语句只覆盖了一个切片,但初始对象是一个映射。所以你的交换机最初没有找到匹配项
推荐阅读
- c - 为什么我的 Caesar 解决方案 (CS50) 重复输入大写字符?
- python - 如何将函数应用于数据框中的一组行?
- vue.js - Json 对象未在另一个函数中更新
- php - PHP 包含文件、负匹配行、输出文件
- angular - 如何将 Auth0 与 .net 核心 API 和 Angular 一起使用?
- r - R - 如何比较两个数据帧的行并返回每种情况下相同值的计数
- javascript - 表格分页:如何创建一个包含 10 个元素的表格并实现第一个、上一个、下一个和最后一个按钮?
- spring - openapi 3 kotlin-spring 无法导入接口
- function - 运行 PL SQL 函数的问题
- python - 在 python 中出现“ValueError:无法将字符串转换为浮点数”错误