2017-03-14 14 views
-1

golangに新しく追加しました& Elasticsearchサーバーに一括アップロードするためのスクリプトを作成しようとしています。私のJSONデータセットは、このようなものである...私は上記のデータセットのために(グーグル&他のオンライン情報を参照のうえで)行わgolangでネストされたデータセットの構造を作成する方法は?

{ 
    product_displayname: "LG Stylus 2 Plus K535D (16 GB, Brown)", 
    product_price: "24000.00", 
    popularity: "0.00", 
    barcode: "", 
    exclusive_flag: "0", 
    product_id: "176982", 
    product_name: "Stylus 2 Plus K535D (Brown)", 
    brand_name: "LG", 
    brand_id: "1", 
    product_spec : { 
     display_spec: [{ 
      spec_id: "103", 
      sdv: "24000", 
      snv: "24000.0000" 
     }, { 
      spec_id: "104", 
      sdv: "GSM", 
      snv: "0.0000" 
     }], 
     filter_spec: [{ 
      spec_id: "103", 
      sdv: "24000", 
      snv: "24000.0000" 
     }, { 
      spec_id: "105", 
      sdv: "Touch Screen", 
      snv: "0.0000" 
     }] 
    } 
} 

Golang構造は次のようである...

type Product struct { 
    product_displayname string `json:"product_displayname"` 
    product_price  string `json:"product_price"` 
    popularity   string `json:"popularity"` 
    barcode    string `json:"barcode"` 
    exclusive_flag  string `json:"exclusive_flag"` 
    product_id   string `json:"product_id"` 
    product_name  string `json:"product_name"` 
    brand_name   string `json:"brand_name"` 
    brand_id   string `json:"brand_id"` 
    product_spec 
} 

type product_spec struct { 
    display_spec []display_speclist 
    filter_spec []filter_speclist 
} 

type display_speclist struct { 
    spec_id string `json:"spec_id"` 
    sdv  string `json:"sdv"` 
    snv  string `json:"snv"` 
} 

type filter_speclist struct { 
    spec_id string `json:"spec_id"` 
    sdv  string `json:"sdv"` 
    snv  string `json:"snv"` 
} 

しかし、私はマッピングでいくつかのミスを作っているように私は感じて、私はエラー

github.com/crazyheart/elastic-bulk-upload/main.go:70: syntax error: missing operand 
github.com/crazyheart/elastic-bulk-upload/main.go:70: unknown escape sequence 
github.com/crazyheart/elastic-bulk-upload/main.go:71: syntax error: non-declaration statement outside function body 

次取得しています私の一括アップロードスクリプトでサンプルデータを持つ構造体の上に使用しようとしている時はいつでもFIEを入れ子になっていますgolang構造のld display_spec & filter_spec。しかし、それが何であるか把握することはできません。

main.go

package main 

import (
    "fmt" 
    "golang.org/x/net/context" 
    "gopkg.in/olivere/elastic.v5" 
    "strconv" 
) 

type Product struct { 
    ProductDisplayname string `json:"product_displayname"` 
    ProductPrice string `json:"product_price"` 
    Popularity string `json:"popularity"` 
    Barcode string `json:"barcode"` 
    ExclusiveFlag string `json:"exclusive_flag"` 
    ProductID string `json:"product_id"` 
    ProductName string `json:"product_name"` 
    BrandName string `json:"brand_name"` 
    BrandID string `json:"brand_id"` 
    ProductSpec struct { 
     DisplaySpec []struct { 
      SpecID string `json:"spec_id"` 
      Sdv string `json:"sdv"` 
      Snv string `json:"snv"` 
     } `json:"display_spec"` 
     FilterSpec []struct { 
      SpecID string `json:"spec_id"` 
      Sdv string `json:"sdv"` 
      Snv string `json:"snv"` 
     } `json:"filter_spec"` 
    } `json:"product_spec"` 
} 

func main() { 
    // Create a context 
    ctx := context.Background() 

    client, err := elastic.NewClient() 
    if err != nil { 
     fmt.Println("%v", err) 
    } 

    // Bulk upload code 
    n := 0 
    for i := 0; i < 1000; i++ { 
     bulkRequest := client.Bulk() 
     for j := 0; j < 10000; j++ { 
      n++ 
      product_data := Product{product_displayname:"LG Stylus 2 Plus K535D (16 GB, Brown)",product_price:"24000.00",popularity:"0.00",barcode:"",exclusive_flag:"0",product_id:"17698276",product_name:"Stylus 2 Plus K535D (Brown)",brand_name:"LG",brand_id:"1",product_spec:{display_spec:[{spec_id:"103",sdv:"24000",snv:"24000.0000"},{spec_id:"104",sdv:"GSM",snv:"0.0000"}],filter_spec:[{spec_id:"103",sdv:"24000",snv:"24000.0000"},{spec_id:"105",sdv:"Touch Screen",snv:"0.0000"}]} } 
      req := elastic.NewBulkIndexRequest().Index("shopfront").Type("products").Id(strconv.Itoa(n)).Doc(product_data) 
      bulkRequest = bulkRequest.Add(req) 
     } 

     bulkResponse, err := bulkRequest.Do(ctx) 
     if err != nil { 
      fmt.Println(err) 
     } 
     if bulkResponse != nil { 
      fmt.Println(bulkResponse) 
     } 
     fmt.Println(i) 
    } 
} 

答えて

0

ワークフロー

1.-ごjson(あなたが投稿1が無効である)を検証します。

2.-適切なstructを作成してください、あなたはこの素晴らしいtoolを使用して自分自身を助けることができます。あなたのケースでは

structsあなたが最初の文字(ありがとう@ANisus)を活用することにより、構造体のフィールドをエクスポートしていない以外細かいように見えます。

これは(短絡した)より多くのようですナチュラル。また

type Product struct { 
    ProductDisplayname string `json:"product_displayname"` 
    ProductSpec struct { 
     DisplaySpec []struct { 
      SpecID string `json:"spec_id"` 
      Sdv string `json:"sdv"` 
      Snv string `json:"snv"` 
     } `json:"display_spec"` 
     FilterSpec []struct { 
      SpecID string `json:"spec_id"` 
      Sdv string `json:"sdv"` 
      Snv string `json:"snv"` 
     } `json:"filter_spec"` 
    } `json:"product_spec"` 
} 
+0

、彼は最初の文字を大文字にすることにより、構造体のフィールドをエクスポートしない共通の囲碁初心者のミスを実行します。しかしそれは素晴らしいツールです! – ANisus

+0

もう一つのこと:彼が使用している "json"の場合、それは無効です。 JSONオブジェクトのキーを引用符で囲む必要があります: 'barcode'の代わりに' 'barcode'' – ANisus

+0

もう一度@ANisusが答えに組み込まれました。 – klashxx

関連する問題