在Golang中解析JSON数组

时间:2016-08-10 08:11:54

标签: arrays json go slice

简单的问题:如何使用json包解析Go中的字符串(这是一个数组)?

type JsonType struct{
    Array []string
}

func main(){
    dataJson = `["1","2","3"]`
    arr := JsonType{}
    unmarshaled := json.Unmarshal([]byte(dataJson), &arr.Array)
    log.Printf("Unmarshaled: %v", unmarshaled)
}

2 个答案:

答案 0 :(得分:18)

Unmarshal的{​​{3}}是错误的,这就是您要打印的内容:

// Return value type of Unmarshal is error.
err := json.Unmarshal([]byte(dataJson), &arr)

您也可以摆脱JsonType并使用切片:

package main

import (
    "encoding/json"
    "log"
)

func main() {
    dataJson := `["1","2","3"]`
    var arr []string
    _ = json.Unmarshal([]byte(dataJson), &arr)
    log.Printf("Unmarshaled: %v", arr)
}

// prints out:
// 2009/11/10 23:00:00 Unmarshaled: [1 2 3]

游戏代码:return value

答案 1 :(得分:4)

注意:此答案是在编辑问题之前编写的。在original question #include <curl\curl.h>传递给&arr

json.Unmarshal()

您将unmarshaled := json.Unmarshal([]byte(dataJson), &arr) 的地址传递给json.Unmarshal()以解组JSON数组,但arr不是数组(或切片),它是结构值。

可以将数组解组为Go数组或切片。所以通过arr

arr.Array

输出(在Go Playground上尝试):

dataJson := `["1","2","3"]`
arr := JsonType{}
err := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v, error: %v", arr.Array, err)

当然,您甚至不需要2009/11/10 23:00:00 Unmarshaled: [1 2 3], error: <nil> 包装,只需使用简单的JsonType切片:

[]string