Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何从数组循环键值创建结构_Json_Loops_Go_Struct_Foreach - Fatal编程技术网

Json 如何从数组循环键值创建结构

Json 如何从数组循环键值创建结构,json,loops,go,struct,foreach,Json,Loops,Go,Struct,Foreach,谁能告诉我如何从一个数组创建多个结构 例如: { "key1": [ { "subkey1": "", "subkey2": "" }, { "subkey1": "" } ] "key2": [ {

谁能告诉我如何从一个数组创建多个结构

例如:

{
   "key1": [
      {
         "subkey1": "", 
         "subkey2": ""
      },
      {
         "subkey1": "" 
      }
   ]
   "key2": [
      {
         "subkey1": "", 
         "subkey2": ""
      }
   ]
}

瞧,我需要为每个键创建一个struct foreach,并基于子键附加第二个struct。

一种方法是:

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

var input = `{
    "key1": [
       {
          "subkey1": "Apple", 
          "subkey2": "Dog"
       },
       {
          "subkey1": "Bear" 
       }
    ],
    "key2": [
       {
          "subkey1": "Monkey", 
          "subkey2": "Turtle"
       }
    ]
 }`

var response map[string][]map[string]string

func main() {
    var err = json.Unmarshal([]byte(input), &response)
    if err != nil {
        log.Fatalln(err.Error())
    }
    for k, v := range response {
        fmt.Printf("Key: %s : | Value : %v\n", k, v)
    }

    for _, v := range response["key1"] {
        fmt.Println(v["subkey1"])
    }
    }
将打印:

    Key: key2 : | Value : [map[subkey1:Monkey subkey2:Turtle]]
    Key: key1 : | Value : [map[subkey1:Apple subkey2:Dog] map[subkey1:Bear]]
    Apple
    Bear
[~/Projects/GoSO]@somewhere #> go run main.go 
Key: key1 : | Value : [{Apple Dog} {Bear }]
Key: key2 : | Value : [{Monkey Turtle}]
Apple
Bear
如果需要,还可以使用结构作为字典中的值:

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

var input = `{
    "key1": [
       {
          "subkey1": "Apple", 
          "subkey2": "Dog"
       },
       {
          "subkey1": "Bear" 
       }
    ],
    "key2": [
       {
          "subkey1": "Monkey", 
          "subkey2": "Turtle"
       }
    ]
 }`

type YourStruct struct {
    Subkey1 string `json:"subkey1"`
    Subkey2 string `json:"subkey2"`
}

var response map[string][]YourStruct

func main() {
    var err = json.Unmarshal([]byte(input), &response)
    if err != nil {
        log.Fatalln(err.Error())
    }
    for k, v := range response {
        fmt.Printf("Key: %s : | Value : %v\n", k, v)
    }

    for _, v := range response["key1"] {
        fmt.Println(v.Subkey1)
    }
}
将打印:

    Key: key2 : | Value : [map[subkey1:Monkey subkey2:Turtle]]
    Key: key1 : | Value : [map[subkey1:Apple subkey2:Dog] map[subkey1:Bear]]
    Apple
    Bear
[~/Projects/GoSO]@somewhere #> go run main.go 
Key: key1 : | Value : [{Apple Dog} {Bear }]
Key: key2 : | Value : [{Monkey Turtle}]
Apple
Bear

你是在问如何解码to Go类型问题中的JSON文档吗?是的,我在一个单独的文件中得到了JSON,我需要读取该文件并以JSON打印内容format@bmjp该包描述了如何将JSON实体映射到Go类型。你试过使用这个软件包吗?你遇到了什么问题?谢谢你的回答Matias Barrios。