2

我正在调用 Google Translate API,并希望将响应表示为结构。JSON 响应是:

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

我试图想出一个结构:

type Translations struct{
  TranslatedText string
  SourceLanguage string
}

type Translation struct{
  Data string
  Value *[]Translations
}

或者:

type Translations struct{
  TranslatedText string
  SourceLanguage string
}

type Translation struct{
  Data string
  Value Translations
}

哪种方法是正确的?

4

2 回答 2

4

这是一个将两个结构定义合并为一个的工作示例。

http://play.golang.org/p/nI0Qet6R78

package main

import (
    "fmt"
    "encoding/json"
    )

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

func main() {

    source := []byte(`
    {
     "data": {
      "translations": [
       {
        "translatedText": "Mi nombre es John, nació en Nairobi y tengo 31 años de edad",
        "detectedSourceLanguage": "en"
       }
      ]
     }
    }
    `)

    var j Translation
    err := json.Unmarshal(source, &j)
    if err != nil {
        panic(err)
    }
    for _,t := range j.Data.Translations {
        fmt.Printf("----\n")
        fmt.Printf("translatedText: %s\n", t.TranslatedText)
        fmt.Printf("detectedSourceLanguage: %s\n", t.DetectedSourceLanguage)
    }
}
于 2012-12-06T17:17:21.620 回答
0

您可以将数据分成三个部分。translation包含在translations数组中的单个。您的主要结构是data.

我发现最容易从最内部的结构开始并定义它,然后按我的方式工作到外部结构。

这些的表示可以这样定义:

type translation struct {
    TranslatedText string
    SourceLanguage string `json:"detectedSourceLanguage"`
}

type translations struct {
    Translations []translation
}

type data struct {
    Data translations
}

如果数据结构不是太复杂,你可以像这样把它们放在一起:

type data struct {
    Data struct {
        Translations []struct {
            TranslatedText string
            SourceLanguage string `json:"detectedSourceLanguage"`
        }
    }
}

在一个完整的工作示例中:

package main

import (
    "encoding/json"
    "fmt"
)

var json_s string = `{
  "data": {
    "translations": [
      {
        "translatedText": "Mi nombre es John, nació en Nairobi y tengo 31 años de edad",
        "detectedSourceLanguage": "en"
      }
    ]
  }
}`

type data struct {
    Data struct {
        Translations []struct {
            TranslatedText string
            SourceLanguage string `json:"detectedSourceLanguage"`
        }
    }
}

func main() {
    var translation data
    err := json.Unmarshal([]byte(json_s), &translation)
    if err != nil {
        panic(err)
    }

    fmt.Printf("%+v", translation)
}
于 2012-12-06T17:13:57.427 回答