如何在Golang中迭代JSON数组?

Rem*_*emi 11 json go

我试图解码一个JSON数组并将其放在一个结构的片中.我已经阅读了如何执行此操作,但前提是JSON数组包含键.我的JSON数组不包含键.

我已经将程序剥离到只处理JSON数据的部分.它编译,可以在下面找到.

package main

// 2014-04-19

import (
    "fmt"
    "encoding/json"
)

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
}
Run Code Online (Sandbox Code Playgroud)

我在Go Lang网站上搜索了诸如"Go Lang JSON decode without keys"之类的内容,并阅读了文章(以及"包页").我可以找到有关如何使用Go和JSON的足够信息,但是我发现的文章都没有解释如何在没有JSON数组中的键的情况下执行此操作.

如果我得到错误,我不会觉得奇怪; JSON值是stringy-numbers(这就是我将它们作为输入的方式),但我试图将它们放在整数中.我虽然没有收到错误.我试过在'itemdata'结构字符串中创建值,这没有多大帮助.从JSON值中删除引号也没有帮助.

我想知道如何在'itemdata'片段中创建我的JSON数组.三个值中的第一个将进入'itemdata.data1',第二个进入'itemdata.data2',第三个进入'itemdata.data3'.

如果您认为我可以改进我的问题,请告诉我.


Remi ,提前谢谢

Den*_*ret 8

你在这里有一个二维字符串数组.您可以像这样解码它:

type itemdata [][]string

func main() {
   var datas itemdata

    json.Unmarshal([]byte(`[["7293","1434","99646"],["4657","1051","23795"]]`), &datas)
    fmt.Println(len(datas))
    fmt.Println("This prints")
    for i := range datas {
        fmt.Println(datas[i][1]) 
    }
    fmt.Println("And so does this")
}
Run Code Online (Sandbox Code Playgroud)

示范

  • @Remi在花费一些时间消化和测试答案时,SO绝对没有问题 (2认同)