不明な構造の JSON の処理: アンマーシャリングと変更
多くのプログラミング シナリオでは、不明な構造の JSON データを扱うのは困難な場合があります。ただし、Go は、この障害を克服するソリューションを提供します。
次のような JSON 文字列を受け取る状況を考えてみましょう。
{ "votes": { "option_A": "3" } }
あなたの目標は、次のような新しい "count" キーを追加することです。 JSON オブジェクトに「1」の値を設定します。ただし、JSON 構造は予測できないため、事前定義された構造体で標準の json.Unmarshal 関数を使用することはできません。
この課題に対処するには、map[string]interface{} タイプを利用できます。これにより、JSON を汎用マップにアンマーシャリングできます。キーは文字列、値は任意のタイプのデータを表すインターフェイスです。
コードは、これを実現する方法を示しています。
package main import ( "encoding/json" "fmt" ) func main() { in := []byte(`{ "votes": { "option_A": "3" } }`) var raw map[string]interface{} if err := json.Unmarshal(in, &raw); err != nil { panic(err) } raw["count"] = 1 out, err := json.Marshal(raw) if err != nil { panic(err) } fmt.Println(string(out)) }
このコードでは、JSON データを生のマップにアンマーシャリングします。構造が不明なため、値はインターフェイスとして表されます。
その後、キーとして「count」、値として 1 を含む新しいキーと値のペアを追加することで、マップを変更できます。最後に、json.Marshal を使用して、変更したマップを JSON 文字列にマーシャリングします。
出力は期待どおりになります。
{"votes":{"option_A":"3"},"count":1}
この手法は、JSON データを次のように処理する柔軟な方法を提供します。未知の構造を利用できるため、必要に応じてデータを変更および強化できます。
以上がGo で不明な構造を持つ JSON オブジェクトを変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。