如何在Golang中迭代JSON数组?

时间:2014-04-25 07:46:49

标签: 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
}

我搜索过没有按键的' Go Lang JSON解码'在Go Lang网站上阅读文章(以及'包装页面')。我可以找到有关如何使用Go和JSON的足够信息,但是我发现的文章都没有解释如何在没有JSON数组中的键的情况下执行此操作。

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

我想知道如何在一个&item项目数据中创建我的JSON数组。三个值中的第一个将进入" itemdata.data1',第二个进入" itemdata.data2'第三个是“itemdata.data3'。

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

提前致谢,
雷米

1 个答案:

答案 0 :(得分:7)

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

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")
}

Demonstration