json - Unmarshal json 具有多种类型的数据,没有键
问题描述
假设我有这样的json:
{
"a": [
[
"aaa",
15
],
[
"bbb",
11
]
]
}
我有这个代码:
func main() {
XJson := `
{
"a": [
[
"aaa",
15
],
[
"bbb",
11
]
]
}`
var Output StructJson
json.Unmarshal([]byte(XJson), &Output)
fmt.Println(Output)
}
type StructJson struct {
[][]string `json:"a"` //wrong because have 15 and 11 have int type data
///what must i do in here?
}
如何解组?我的意思是,“aaa”和“bbb”具有数据字符串类型,15 和 11 具有数据整数类型。如果我使用那个“错误”的结构,输出是
{[[aaa ] [bbb ]]}
解决方案
@ekomonimo 正如@colm.anseo 提到的,为了解决这类问题,我们可以使用interface{}
这里如何使用它:
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
XJson := `
{
"a": [
[
"aaa",
15
],
[
"bbb",
11
]
]
}`
var Output StructJson
json.Unmarshal([]byte(XJson), &Output)
fmt.Println("Output:", Output)
// Prints: aaa string
fmt.Println("Data on path Output.A[0][0]:", Output.A[0][0], reflect.TypeOf(Output.A[0][0]))
// Prints: 15 float64
fmt.Println("Data on path Output.A[0][1]:", Output.A[0][1], reflect.TypeOf(Output.A[0][1]))
}
type StructJson struct {
A [][]interface{} `json:"a"`
}
推荐阅读
- c++ - C++:如何根据地形高度更新玩家高度?
- c# - Windows 窗体应用程序 - C# 获取用户输入
- java - Spring Boot:在 Runnable 静态线程中访问 Autowired 组件
- python - 在 Python 模块中使用 InstaLoader
- javascript - 如何在 svelte 中向窗口事件/鼠标滚轮添加参数
- java - 如何格式化打印整数,以便小数点左侧的所有位都对齐?
- javascript - highcharts 饼图为每个部分应用一个模态
- html - 试图找到一种方法在 CSS 中的 div 类中居中多个元素
- http - Prolog:process_create 在 http_handler 中不起作用
- php - 如何使用带有 PHP 的单选按钮将某些信息上传到我的数据库?