2

JSONを介していくつかの大きな構造体をエクスポートし、その属性の一部のみを更新するためにJSON文字列を取り戻す必要があります。

次の構造体を作成しましょう。

type House struct {
    Name   string  `json:"name"`
    Rooms  int     `json:"rooms_count"`
    Owner  *Owner  `json:"-"`
}

これをでエンコードすると、encoding/json次のようなJSON文字列になります。

{"name":"some name", "rooms_count":5}

私は今このJSON文字列を取得します:

{"name":"some other name", "rooms_count":7, Owner:{something...}}

ユーザーはすべての属性を変更したいと考えています。Ownerエクスポートされないため、許可されていません。しかし、私はの変更のみを許可したいだけですrooms_countEncoder一部の属性は、でエクスポートする必要があるが、では使用しないという言い方はありますDecoderか?これらすべての小切手を手動で書かなければならないのは非常に不快です。

4

2 に答える 2

0

あなたの正確なケースでは、単に新しい構造体に非整列化して a を実行するだけで、currentStruct.Rooms = newStruct.Roomsまさにあなたが望むものです。

このようなカスタム マーシャリングを行うには、完全に簡単な方法はありません。あなたが得ることができる最高のものは、異なる機会のための異なるタグと、それらの間の変換を実行するための少しのリフレクションを持つ2つの同一の構造体です。

于 2013-02-03T08:54:36.400 に答える
0

encoding/json パッケージのパッチを作成し、チケットを開きました。

Encoderと の構造体フィールドをDecoder個別に無視するために、構造体に 2 つのタグ オプションを追加するだけです。2 つのフィールドすべてがエンコード/エクスポートされますがName、デコード/更新されるだけの例:

type House struct {
    Name    string    `json:"house_name"`
    PubDate time.Time `json:"pub_date,nodecode"`
}
于 2013-02-03T13:27:51.270 に答える