[解決済み] JSONとunexportedフィールドの扱いについて
質問
unexported フィールドがエンコーディング/json によって含まれない技術的な理由はありますか? そうではなく、任意の決定である場合、unexported であっても含めるための追加のバックドア オプション (たとえば '+') がある可能性はありますか?
この機能を得るためにクライアントコードにエクスポートを要求することは、特に小文字がカプセル化を提供している場合、またはマーシャル構造の決定がそれらの設計よりもずっと後になる場合、残念な感じがします。
人々はどのようにこれに対処しているのでしょうか?ただすべてをエクスポートするのですか?
また、フィールド名をエクスポートすると、推奨されるイディオムに従うことが難しくなりませんか。構造体 X がフィールド Y を持つ場合、アクセッサメソッド Y() を持つことはできないと思います。Y へのインターフェイスのアクセスを提供したい場合、ゲッターの新しい名前を考えなければなりませんし、どうしたって http://golang.org/doc/effective_go.html#Getters
どのように解決するのですか?
技術的な理由があります。jsonライブラリは、エクスポートされない限り、reflectを使用してフィールドを表示する権限を持っていません。パッケージは、それ自身のパッケージ内の型のエクスポートされていないフィールドを見ることができるだけです。
この問題に対処するためにできることは、エクスポートされたフィールドを持つ未エクスポートの型を作ることです。Jsonは問題なく渡された場合、unexported型にアンマーシャルしますが、APIドキュメントには表示されないでしょう。次に、エクスポートされた型を作成して、その型を埋め込むことができる。このエクスポートされた型には
json.Marshaler
と
json.Unmarshaler
というインターフェイスがあります。
注意:全てのコードは未テストであり、コンパイルすらできないかもしれません。
type jsonData struct {
Field1 string
Field2 string
}
type JsonData struct {
jsonData
}
// Implement json.Unmarshaller
func (d *JsonData) UnmarshalJSON(b []byte) error {
return json.Unmarshal(b, &d.jsonData)
}
// Getter
func (d *JsonData) Field1() string {
return d.jsonData.Field1
}
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] UnixツールでJSONをパースする
-
[解決済み] JSON命名規則(snake_case、camelCase、PascalCase) [終了しました。]
-
[解決済み] Scalaで使うべきJSONライブラリは?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Twitter API エラー 215
-
[解決済み] Unreadable Notebook NotJSONError('Notebook does not appear to be JSON: u'{'cells": [\'{'cell_type": "...],)
-
[解決済み] ヘッダ値:application/vnd.api+json
-
[解決済み] Postgresで、レコードにjsonや文字列が混在している場合に、'invalid input syntax for type json'を防ぐにはどうしたらよいでしょうか。
-
[解決済み] JSON命名規則(snake_case、camelCase、PascalCase) [終了しました。]
-
[解決済み] Node.js プロジェクトの package.json ファイルを自動的にビルドする方法はありますか?
-
[解決済み] jsonパラメータを含むCurl GETリクエスト
-
[解決済み] Mongo コレクションを JSON 形式にダンプする
-
[解決済み] UnixコマンドラインJSONパーサー?[クローズド]
-
[解決済み] react nativeでローカルのJSONファイルからデータを取得するには?