douqiao6015 2014-04-25 07:46
浏览 1134


I am trying to decode a JSON array and put it in a slice of a struct. I've read how to do this, but only if the JSON array contains keys. My JSON array does not contain keys.

I have stripped the program down to only the part where it handles the JSON data. It compiles and can be found below.

package main

// 2014-04-19

import (

type itemdata struct {
    data1 int // I have tried making these strings
    data2 int
    data3 int

func main() {
    datas := []itemdata{}

    json.Unmarshal([]byte(`[["7293","1434","99646"],["4657","1051","23795"]]`), &datas)
    // I have tried the JSON string without the qoutes around the numbers
    fmt.Println(len(datas)) // This prints '2'
    fmt.Println("This prints") // This does print 
    for i := range datas {
        fmt.Println(datas[i].data1)  // This prints '0', two times 
    fmt.Println("And so does this") // This does print

I've searched for things like 'Go Lang JSON decode without keys' and read articles (and 'package pages') on the Go Lang website. I can find enough information on how to work with Go and JSON, but none of my found articles explain how to do it without keys in the JSON array.

I wouldn't find it odd if I would get an error; The JSON values are stringy-numbers (that's how I get them as input), but I am trying to put them in integers. I am not getting an error though. I have tried making the values in the 'itemdata' struct strings, that didn't help much. Removing the quotes from the JSON values didn't help either.

I would like to know how I can make my JSON array in a slice of 'itemdata'. The first out of three values would go into 'itemdata.data1', the second in 'itemdata.data2' and the third in 'itemdata.data3'.

Please let me know if you think I can improve my question.

Thanks in advance,

  • 写回答

1条回答 默认 最新

  • dongzexi5125 2014-04-25 07:50

    What you have here is a bi-dimensional array of strings. You can decode it like this :

    type itemdata [][]string
    func main() {
       var datas itemdata
        json.Unmarshal([]byte(`[["7293","1434","99646"],["4657","1051","23795"]]`), &datas)
        fmt.Println("This prints")
        for i := range datas {
        fmt.Println("And so does this")


    本回答被题主选为最佳回答 , 对您是否有帮助呢?



    • ¥20 python 3des pyDes库
    • ¥15 关于#mysql#安装失败的问题。MySQL
    • ¥15 想问一下for循环计算表达式的方法,第一次接触
    • ¥15 如何在VA框架上面加功能,去读取框架内任何app数据功能
    • ¥15 关于#c语言#的问题:用c或c++写一个计算下列问题有关软件工程的代码并加上分析
    • ¥15 Zeppelin0.10.0版本升级lib包下的shiro-web
    • ¥15 链表入队的指针内存问题
    • ¥20 vba如何写本地html文件执行js
    • ¥15 VS2022的C#如何创建
    • ¥20 关于#用户注册#的问题,如何解决?