アウトライン
最近の需要がちょうどスケジュールに深刻な問題を評価するために登る、ピットに落ち、次の3つの図は、気分を実勢に沿ったものです。
オンデマンドで
見積スケジュール
乾燥し始めました
なぜこのように、私の簡潔は以下に要約されています。
- 第三者とドッキング。
- クロスドッキングチーム。
- ゴーでプロジェクトを行うには初めて。
- ビジネスプロセスは、スケジュール(ピット)に明確に記録しませんでした。
- 調整後の需要はないスケジュール(ピット)を調整します。
この経験では、スケジュールを評価するとあなたも起こっていることができる方法で、後者。
騒ぎ、テーマ今日に。
今日JSONデータ移動を解析する方法を共有し、その上で不確実な構造体を返すと、3例、強く型付けされた解像度、弱いタイプの解像度が含まれています。
JSON構造
たとえば、インターフェイスを要求された自宅の電話、JSONは、次のデータを返します。
{
"resultcode": "200",
"reason": "Return Successd!",
"result": {
"province": "浙江",
"city": "杭州",
"areacode": "0571",
"zip": "310000",
"company": "中国移动",
"card": ""
}
}
アイデアはこれです:
構造体への1.まずJSONターン。
2.次に、json.Unmarshal()
次のことができます。
JSONターン構造体、自分の手書きあまりにも面倒、私はこれを使用して、多くのオンラインツールを直接使用することができますがあります。
https://mholt.github.io/json-to-go/
左後JSONに固定構造体を生成します。
達成するためにコードを使用します:
type MobileInfo struct {
Resultcode string `json:"resultcode"`
Reason string `json:"reason"`
Result struct {
Province string `json:"province"`
City string `json:"city"`
Areacode string `json:"areacode"`
Zip string `json:"zip"`
Company string `json:"company"`
Card string `json:"card"`
} `json:"result"`
}
func main() {
jsonStr := `
{
"resultcode": "200",
"reason": "Return Successd!",
"result": {
"province": "浙江",
"city": "杭州",
"areacode": "0571",
"zip": "310000",
"company": "中国移动",
"card": ""
}
}
`
var mobile MobileInfo
err := json.Unmarshal([]byte(jsonStr), &mobile)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(mobile.Resultcode)
fmt.Println(mobile.Reason)
fmt.Println(mobile.Result.City)
}
出力:
200
Return Successd!
杭州
パーフェクト解像度。
この問題は終わっていないために、これらの質問を熟考します:
JSON形式のデータ・タイプが不明ではどのように行いますか?
データ結果JSON形式のパラメータが固定されていない場合はどのように行うには?
アイデアはこれです:
オープンソースライブラリがgithubの上で見つけるために、ハハ、私が使用していますが、これは次のとおりです。
https://github.com/mitchellh/mapstructure
のは、最初の問題、どのように行うために、データ・タイプが不明を解決する最初の下で一緒に学びましょうか!
ResultCodeの、JSONの文字列タイプではなく、返されたint型のResultCodeのを定義します。
弱いのドキュメントタイプの解像度を確認する方法がありWeakDecode()
、レッツ・トライは:
type MobileInfo struct {
Resultcode string `json:"resultcode"`
}
func main() {
jsonStr := `
{
"resultcode": 200
}
`
var result map[string]interface{}
err := json.Unmarshal([]byte(jsonStr), &result)
if err != nil {
fmt.Println(err.Error())
}
var mobile MobileInfo
err = mapstructure.WeakDecode(result, &mobile)
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(mobile.Resultcode)
}
出力:
200
最初の問題は解決されました。
そして、第二の問題を解決するため、どのようにして固定されていないパラメータにつながりますか?
これは上記の例で、公式の表情によって提供された例がありませんExample (EmbeddedStruct)
。
type Family struct {
LastName string
}
type Location struct {
City string
}
type Person struct {
Family `mapstructure:",squash"`
Location `mapstructure:",squash"`
FirstName string
}
func main() {
input := map[string]interface{}{
"FirstName": "Mitchell",
"LastName": "Hashimoto",
"City": "San Francisco",
}
var result Person
err := mapstructure.Decode(input, &result)
if err != nil {
panic(err)
}
fmt.Println(result.FirstName)
fmt.Println(result.LastName)
fmt.Println(result.City)
}
出力:
Mitchell
Hashimoto
San Francisco
mapstructureパッケージを使用して、構造体タグの識別はない書き込みJSON、書き込みmapstructureを行います。
他の例は、次のような、自分の権利を探求しますExample (Tags)
。