如何用键值结构的数组解组JSON,而键所在的键没有json标签

问题描述 投票:-1回答:1

我在解组以下json时遇到麻烦:

{
    "input-1": [
        "S",
        15.0,
        "some1",        
        [
            [
                1111111.357,
                "QQ",
                "Toronto"
            ]
        ]
    ],
    "input-2": [
        "EE",
        90.1,
        "some2",
        [
            [
                55555550.705,
                "RR",
                "Kuala Lumpur"
            ],
            [
                22233330.134,
                "OO",
                "Bogota"
            ]           
        ]
    ],
    "input-3": [
        "UU",
        87.0,
        "some99",       
        [
            [
                8800221.500,
                "LL",
                "Lagos"
            ]
        ]
    ]
}

我对应的代码如下:

package main

import (
    "fmt"
    "encoding/json"
    "os"
    "io/ioutil"
)

type InputC struct {
    Type                string
    SomeFloat           float64
    CorrespondingPerson string
    Desc                []Under
}
type Under struct {
    IDCity   float64
    CityType string
    CityName string
}
func main() {
    f, err := os.OpenFile("data.json", os.O_RDONLY, 0755)
    if err != nil {
        fmt.Printf("Error opening file: %v\n", err)
    }

    b, err := ioutil.ReadAll(f)
    if err != nil {
        fmt.Printf("Error reading file: %v\n", err)
    }

    inputs:= map[string]InputC{}
    err = json.Unmarshal(b, &inputs)
    if err != nil {
        fmt.Printf("Error Unmarshalling file: %v\n", err)
    }

    for k, v := range(inputs) {
        fmt.Printf("%v\n",v.Desc[0].IDCIty)
    }
}

我从此代码收到的答复是:

错误解组文件:json:无法将数组解组为main.Input类型的Go值。恐慌:运行时错误:索引超出范围

之后,我将代码更改为此:

    inputs:= []InputC{}

但仍然出现错误:

错误解组文件:json:无法将对象解组为[] main.InputC类型的Go值>

很明显,我丢失了一些东西,但是我不知道如何从我拥有的JSON中提取信息。

我在解组以下json时遇到麻烦:{“ input-1”:[“ S”,15.0,“ some1”,[[1111111.357,“ ...

json go unmarshalling
1个回答
1
投票

如果在自定义结构上实现[]interface{}接口并使用json.Unmarshaler临时保存各个数组元素的值,则可以避免使用[]json.RawMessage。请记住,以下解决方案在很大程度上取决于要保证的数组值的数量和顺序。

© www.soinside.com 2019 - 2024. All rights reserved.