2012-12-07 54 views
0

我有以下結構:解組JSON沒有返回

type Translation struct{ 
    Data string 
    Translations []struct{ 
    TranslatedText string 
    SourceLanguage string 
    } 
} 
type InputText struct { 
    PlainText string 
    TargetLanguage string 
    Values url.Values 
} 

,並擊中谷歌翻譯API,並返回我想解組JSON字符串的方法:

func (i *InputText) TranslateString() (*Translation, error){ 
    if len(i.PlainText) == 0 { 
    log.Fatal("No text specified") 
    } 
    if len(i.TargetLanguage) == 0 { 
    log.Fatal("No target language specified") 
    } 

    i.Values = make(url.Values) 
    var v = i.Values 
    v.Set("target", i.TargetLanguage) 
    v.Set("key", API_KEY) 
    v.Set("q", i.PlainText) 

    u := fmt.Sprintf("%s?%s", api, v.Encode()) 
    getResp, err := http.Get(u) 
    if err != nil{ 
    log.Fatal("error", err) 
    return nil, err 
    } 
    defer getResp.Body.Close() 
    body, _ := ioutil.ReadAll(getResp.Body) 
    t := new(Translation) 
    json.Unmarshal(body, &t) 

    return t, nil 

} 

func main(){ 
    input := &InputText{"My name is John, I was born in Nairobi and I am 31 years old", "ES", nil} 
    translation, _ := input.TranslateString() 
    fmt.Println(translation) 
} 

當我運行這個代碼我得到的是&{[]}打印出來,我認爲JSON沒有被返回,但當我在TranslateString()方法中試過這個時:

fmt.Println(string(body)) 

它打印出來:

{ 
"data": { 
    "translations": [ 
    { 
    "translatedText": "Mi nombre es John, nació en Nairobi y tengo 31 años de edad", 
    "detectedSourceLanguage": "en" 
    } 
    ] 
} 
} 
+0

我們給了你昨天問題的兩個工作示例答案。請嘗試縮小你的問題。如果你想從'detectedSourceLanguage'取消編組,請確保標記'SourceLanguage'字段。 –

+0

如果我將返回的JSON放入一個字符串,那麼這些示例可以正常工作: jsonval:='{}' 我也將字段SourceLanguage更改爲DetectedSourceLanguage,但沒有運氣。 – jwesonga

回答

1

上面的代碼是一個錯誤是正確的,我的結構是完全錯誤的!它應該是:

type Translation struct{ 
    Data struct { 
     Translations []struct { 
      TranslatedText string 
      DetectedSourceLanguage string 
     } 
    } 
} 
+1

這就是上述答案的確切結構。 –

+0

我的錯誤..活着和學習.. – jwesonga