2012-12-07 53 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