2016-06-14 34 views

回答

2

您可以使用map[string]interface{}类型。

package main 

import (
     "encoding/json" 
     "fmt" 
) 

func main() { 
     var jsonBlob = []byte(`{"thing": [ 
       {"Name": "Platypus", "Order": "Monotremata"}, 
       {"Name": "Quoll", "Order": "Dasyuromorphia"} 
     ]}`) 
     var jsonthing map[string]interface{} 
     err := json.Unmarshal(jsonBlob, &jsonthing) 
     if err != nil { 
       fmt.Println("error:", err) 
     } 
     for k, v := range jsonthing { 
       fmt.Println("key:", k) 
       fmt.Println("value:", v) 
     } 
} 

这将打印出以下:

▶ go run main.go 
key: thing 
value: [map[Name:Platypus Order:Monotremata] map[Name:Quoll Order:Dasyuromorphia]] 

一个清洁的选择是使用go-simplejson库。

首先获得该软件包:go get github.com/bitly/go-simplejson

package main 

import (
     "fmt" 

     simplejson "github.com/bitly/go-simplejson" 
) 

func main() { 
     var jsonBlob = []byte(`{"thing": [ 
       {"Name": "Platypus", "Order": "Monotremata"}, 
       {"Name": "Quoll", "Order": "Dasyuromorphia"} 
     ]}`) 

     json, err := simplejson.NewJson(jsonBlob) 
     if err != nil { 
       fmt.Println(err) 
     } 
     b, err := json.EncodePretty() 
     if err != nil { 
       fmt.Println(err) 
     } 
     fmt.Println(string(b)) 
} 

这会给你:

▶ go run main.go 
{ 
    "thing": [ 
    { 
     "Name": "Platypus", 
     "Order": "Monotremata" 
    }, 
    { 
     "Name": "Quoll", 
     "Order": "Dasyuromorphia" 
    } 
    ] 
} 
+0

是的,我的问题是从.json文件中获取 –

+0

说我给你一个json文件。 data.json我想打印出所有的键和值。您可以轻松地在javascript中使用for循环执行此操作。 Go有没有一种很好的方法来操作它。多数民众赞成我的问题 –

+0

你想操纵JSON或打印JSON?请清楚,因为它们都需要不同的解决方案。您可以使用'ioutil.ReadFile'将'.json'文件读入'[] byte''中。 – nii236