「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GOで派生したスカラータイプのためにUnmarshaljsonを実装する方法は?

GOで派生したスカラータイプのためにUnmarshaljsonを実装する方法は?

2025-04-13に投稿されました
ブラウズ:163

How to Implement UnmarshalJSON for Derived Scalar Types in Go?

go

問題:

の派生スカラーのunmarshaljsonの実装の実装。 Unmarshaljsonは、structを使用せずにスカラー値を変更する方法を提供しないため、これは困難です。 unmarshaljsonメソッドレシーバーの値を変更する方法。文字列値。結果を受信機に割り当てます。 var s文字列 err:= json.unmarshal(data、&s); err!= nil { errを返します } *intvalue = lookup(s) nilを返します }

コード例:
パッケージmain 輸入 ( 「エンコード/json」 「FMT」 )) タイプペンソリドint const( bob personid = iota ジェーン ラルフ 誰も= -1 )) var namemap = map [string] personid { 「ボブ」:ボブ、 「ジェーン」:ジェーン、 「ラルフ」:ラルフ、 「誰も」:誰も } var idmap = map [personid] string { ボブ:「ボブ」、 ジェーン:「ジェーン」、 ラルフ:「ラルフ」、 誰も:「誰も」、 } func(intvalue personid)name()string { idmapを返す[intvalue] } func lookup(name string)personid { namemap [name]を返す } func(intvalue *personid)unmarshaljson(data [] byte)エラー{ var s文字列 err:= json.unmarshal(data、&s); err!= nil { errを返します } *intvalue = lookup(s) nilを返します } タイプmytype struct { Personid `json:" person "` count int `json:" count "` 挨拶文字列 `json:"挨拶 "` } func main(){ var m mytype if err:= json.unmarshal([] byte( `{" person ":" ralph "、" count ":4、" greeting ":" hello "}`)、&m); err!= nil { fmt.println(err) } それ以外 { i:= 0; i

output: hello ralph こんにちはラルフ こんにちはラルフ こんにちはラルフ

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3