2016-03-25 22 views
0

は私が構造を持って動作しません。私は、アプリケーションタグを含めるたびGolang JSONの構造体は、

はしかし、これらのフィールドは、すなわち私のPOSTリクエストの上、ヌルになる私は

{ application_id: '', 
    application_key: '', 
    password: 'myPassword', 
    username: 'myUsername' 
} 

を取得しかし、私は、その後、(そうApplicatinonIdまたはApplicationKeyタグを削除)タグのどちらかを削除する場合そのフィールドは、ここで

を示してい私は私の構造体を設定する方法である:

func getCredentials() Credentials { 
    raw, err := ioutil.ReadFile(os.Getenv("BASE_PATH") + FILE_Credentials) 
    if err != nil { 
     log.Warn("Could not read credentials file: %s", err.Error()) 
     os.Exit(1) 
    } 

    var credentials Credentials 
    json.Unmarshal(raw, &credentials) 
    return credentials 
} 

マイ資格jsonファイルには、次のとおりです。

{ 
    "Username": "myUsername", 
    "Password": "myPassowrd", 
    "ApplicationId": "someID", 
    "ApplicationKey": "someString" 
} 

はその後、私は私のデータをポスト:

credentials := getCredentials() 
url := GetLoginURL() 

resp, body, requestErr := gorequest.New(). 
    Post(url). 
    Send(credentials). 
    End() 

しかし、サーバー上で、私は両方application_idapplication_keyとして空の文字列を取得します。しかし、対応するタグを削除すると、そのフィールドが投稿されます。

+0

問題を再現するための最小限の例を示してください。 – JimB

+0

@JimB、私の質問を更新しました – Kousha

+0

ファイルにはキーがありません: 'application_id'と' application_key' – JimB

答えて

0

この例のファイルに基づいて、Goの構造は次のようになります。

type Credentials struct { 
    Username string `json:"Username"` 
    Password string `json:"Password"` 
    ApplicationId string `json:"ApplicationId"` 
    ApplicationKey string `json:"ApplicationKey"` 
} 

もう一方の端からこれに近づいて、ファイルのエントリを次のように変更することもできます。

{ 
    "Username": "myUsername", 
    "Password": "myPassowrd", 
    "application_id": "someID", 
    "application_key": "someString" 
} 

しかし、それはあなたがそうあなたは通常、あなたのソースを変更してしまう(サードパーティのAPIを呼び出すときのように)あなたが受信しているデータを変更することはできません場合は、より頻繁にあります。あなたは、ファイルを制御し、APIは、私はあなたがAPIを送信するものと一致したファイルの内容を変更することをお勧めしたいの小文字を望んでいるので。時々必要である他のオプションは、別のタイプを使用して(あなたがファイルやAPIもない制御と仮定して、あなたはそれぞれに異なる種類の必要が​​あるだろう)変換ヘルパーを提供することです。 Goエンコーディングパッケージは非常に厳密です。あなたが近くマッチを割り当てますjson.NETのようなものを使用することができる、それはここではそうではありません。完全一致未満のものはUnmarshalからエラーを生成します。

2

資格ファイルが間違っているようです(application_idとapplication_keyキーを使用する必要があります。大文字は大文字ではありませんが、下線は表示されません) :

{ 
    "Username": "myUsername", 
    "Password": "myPassowrd", 
    "application_id": "someID", 
    "application_key": "someString" 
}