[解決済み] GoでJSONを部分的にマップにアンマーシャルする
2022-06-16 08:51:07
質問
私のウェブソケットサーバーは、JSONデータを受信してアンマーシャルします。このデータは常に、キー/値ペアを持つオブジェクトにラップされます。キー文字列は値の識別子として機能し、Go サーバーにそれがどのような値であるかを知らせます。どのような種類の値であるかを知ることによって、私はその値を正しい種類の構造体に JSON アンマーシャルすることができます。
各json-objectは複数のキーと値のペアを含むかもしれません。
JSONの例です。
{
"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},
"say":"Hello"
}
を使った簡単な方法はないでしょうか?
"encoding/json"
パッケージを使って簡単にできる方法はありますか?
package main
import (
"encoding/json"
"fmt"
)
// the struct for the value of a "sendMsg"-command
type sendMsg struct {
user string
msg string
}
// The type for the value of a "say"-command
type say string
func main(){
data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`)
// This won't work because json.MapObject([]byte) doesn't exist
objmap, err := json.MapObject(data)
// This is what I wish the objmap to contain
//var objmap = map[string][]byte {
// "sendMsg": []byte(`{"user":"ANisus","msg":"Trying to send a message"}`),
// "say": []byte(`"hello"`),
//}
fmt.Printf("%v", objmap)
}
どんな種類の提案/助けにも感謝します!
どのように解決するのですか?
これは、アンマーシャリングで
map[string]json.RawMessage
.
var objmap map[string]json.RawMessage
err := json.Unmarshal(data, &objmap)
さらに解析するために
sendMsg
を解析するには、次のような方法があります。
var s sendMsg
err = json.Unmarshal(objmap["sendMsg"], &s)
については
say
についても、同じように文字列にアンマーシャルすることができます。
var str string
err = json.Unmarshal(objmap["say"], &str)
EDITです。 正しくアンマーシャルするために、sendMsg構造体の変数をエクスポートする必要があることに留意してください。構造体の定義は次のようになります。
type sendMsg struct {
User string
Msg string
}
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
-
[解決済み] JSONをC#のダイナミックオブジェクトにデシリアライズする?
-
[解決済み] nodeやExpressを使用してJSONを返す正しい方法
-
[解決済み] fs.writeFileSyncによるJSONオブジェクトの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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Golang で文字列を構造体のようにアンマーシャリングする
-
JsonParseException: 不正な引用符なしの文字 ((CTRL-CHAR, コード 10)): ha
-
com.fasterxml.jackson.databind.exc.MismatchedInputException: インスタンスのデシリアライズができない
-
[解決済み] jqを使用して、オブジェクト内の変数の値に基づいてオブジェクトを選択します。
-
[解決済み] PostgreSQL は結果セットを JSON 配列として返しますか?
-
[解決済み] JSONの容量に限界はありますか?
-
[解決済み] jqを使用してjsonドキュメントの単一の値を更新するにはどうすればよいですか?
-
[解決済み] JSON、REST、SOAP、WSDL、そしてSOA。これらはどのように結びついているのか
-
[解決済み] Swift 4 の JSONDecoder で、見つからないキーは、オプションのプロパティである必要はなく、デフォルト値を使うことができますか?
-
[解決済み] SwiftでHTMLエンティティをデコードするには?