2016-04-30 52 views
0

示例代码如何golang

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type ClassRoom struct { 
    Student struct { 
     Name string 
     /* 
      Address struct { 
       City string 
       Zip int 
      } `json:"address"` 
     */ 
     Address []string `json:"address"` //here, Want to get json string 
     Age  int  `json:"age"` 
    } `json:"student"` 
    ClassCode int `json:"code"` 
} 

func main() { 
    jsonDocs := `[ 
    {"student":{"name":"jss","address":{"City":"Seoul","Zip":54},"Age":28},"ClassCode":1234}]` 

    var node []ClassRoom 

    json.Unmarshal([]byte(jsonDocs), &node) 
    fmt.Println(node) 
} 

我想地址JSON字符串类型的变量(如{"City":"Seoul"....})使用解组从JSON文档拿到的结构JSON字符串。

回答

0

您需要使用的json.RawMessage代替[]string,例如:

type ClassRoom struct { 
    Student struct { 
     Name string 
     Address json.RawMessage `json:"address"` //here, Want to get json string 
     Age  int    `json:"age"` 
    } `json:"student"` 
    ClassCode int `json:"code"` 
} 

func main() { 
    jsonDocs := `[{"student":{"name":"jss","address":{"City":"Seoul","Zip":54},"Age":28},"ClassCode":1234}]` 
    var node []ClassRoom 

    json.Unmarshal([]byte(jsonDocs), &node) 
    fmt.Printf("%s\n", node[0].Student.Address) 

    var addr struct { 
     City string 
     Zip int 
    } 
    json.Unmarshal(node[0].Student.Address, &addr) 
    fmt.Printf("%+v", addr) 
} 

playground

+0

谢谢!^_^ –

+0

@ J.soo如果我的回答有帮助,可以通过点击勾选来选择它:) – OneOfOne