2015-08-28 48 views
-1

我有一點點qiestion!從json添加到數組並在模板中執行數據

如何從json添加到數組數據並執行模板。簡單。但不工作!

package main 

import (
    "fmt" 
    "html/template" 
    "os" 
    "encoding/json" 
) 

type Person struct { 
    Name string 
    Jobs []*Job 
} 

type Job struct { 
    Employer string 
    Role  string 
} 

const templ = `The name is {{.Name}}. 

{{with .Jobs}} 
    {{range .}} 
     An employer is {{.Employer}} 
     and the role is {{.Role}} 
    {{end}} 
{{end}} 
` 

func main() { 
    job1 := Job{Employer: "Monash", Role: "Honorary"} 
    job2 := Job{Employer: "Box Hill", Role: "Head of HE"} 

    byt := []byte(`{"num":6.13,"Jobs":[{"Employer": "test1", "Role": "test1"},{"Employer": "test2", "Role": "test2"}]}`) 

    var dat map[string]interface{} 

    if err := json.Unmarshal(byt, &dat); err != nil { 
      panic(err) 
     } 
     fmt.Println(dat) 




    // HOW ADD FROM ARRAY 'dat' TO STRUCT 'Job' 
    // LINE 54 




    person := Person{ 
     Name: "jan", 
     Jobs: []*Job{&job1, &job2}, 
    } 

    t := template.New("Person template") 
    t, err := t.Parse(templ) 
    checkError(err) 

    err = t.Execute(os.Stdout, person) 
    checkError(err) 
} 





func checkError(err error) { 
    if err != nil { 
     fmt.Println("Fatal error ", err.Error()) 
     os.Exit(1) 
    } 
} 

在這裏,你可以玩/測試代碼:http://play.golang.org/p/AB8hGLrLRy

關注線46

非常感謝您!

+0

這? http://play.golang.org/p/EZJt-y-mMJ – RoninDev

+0

太棒了!這就是我要的!非常感謝你! 小問題一點點;) – Gopher

+0

太棒了!這就是我要的!非常感謝你! 小問題一點點;) 當我從文件讀取json。如果我打印json文件:'[{test1 test1}]' 好吧,轉換爲字節: 'byt:= [] byte(config.Social)' 它的類型如下: '不能轉換config.Social(type [ ] struct {Employer string「json:\」url \「」;標題字符串「json:\」Role \「」})鍵入[] byte' – Gopher

回答

0

首先,您的dat var不是正確的類型。你應該有這樣的事情:

dat := struct { 
    Jobs []*Job 
} 

這樣一來,你的反編組JSON字符串成dat時,該Jobs鍵將充滿你的數據的數組初始化*Job一個陣列。 我使用了一個匿名結構,但你也可以有一個命名結構(參見@ RoninDev的例子)。

然後,只需將它們添加到陣列的人,喜歡的東西:

person.Jobs = append(person.Jobs, jobs.Jobs...) 

注意...運營商,它使用數組作爲可變參數的參數。

您可以在此看到完整的工作代碼playground

+0

這還不能完全準確地表示他的數據。 – evanmcdonnal

+0

它足夠了,他不使用剩餘的屬性。 – Elwinar

+0

是的,這是真的,其他的財產是不需要的。我認爲這是值得詳細的,因爲OP的問題是由於不瞭解JSON的結構和/或它如何在Go中建模而引起的。 – evanmcdonnal

0

你正在解組json,它只是進入語言提供的最曖昧的類型......你可以用一系列類型斷言來解開它,但我不推薦它。 json可以很容易地用Go來建模,如下所示:

type Wrapper struct { 
    Num float64 `json:"num"` 
    Jobs []*Job `json:"Jobs"` 
} 

下面是使用該結構的代碼更新示例; http://play.golang.org/p/aNLK_Uk2km

你反序列化後,他們可以只使用append將它們添加到工作數組中的人的物體,像person.Jobs = append(person.Jobs, dat.Jobs...)

+0

我認爲'jobs:= dat [「Jobs」]。([] Job)'會失敗,因爲'interface {}'解組到'[]類型'不是一個單獨的操作... – Elwinar

+0

@Elwinar yeah這就是沒錯,實際上還需要更多的工作來解開這些數據。 – evanmcdonnal

相關問題