golang では、json は一般的に使用されるデータ交換形式であり、構造化データを json 形式に簡単にシリアル化したり、json 形式のデータから元のデータ型に逆シリアル化したりすることもできます。 json を使用するプロセスでは、json 文字列内のエラーを避けるために一部の特殊文字をエスケープする必要がある場合があります。では、golang で json 文字をエスケープするにはどうすればよいでしょうか?この記事では詳しく紹介していきます。
golang の json
golang では、encoding/json パッケージを使用して json データを処理できます。このパッケージは、golang の任意のデータ型を json 形式の文字列に変換したり、json 形式の文字列を golang の元のデータ型に変換したりできる Marshal および Unmarshal 関数を提供します。以下は簡単な例です:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { p := Person{ Name: "Tom", Age: 20, } data, _ := json.Marshal(p) fmt.Println(string(data)) var newPerson Person json.Unmarshal(data, &newPerson) fmt.Println(newPerson) }
出力結果は次のとおりです:
{"name":"Tom","age":20} {Tom 20}
ご覧のとおり、Person 構造体のインスタンスを json 形式の文字列にシリアル化し、それを逆シリアル化して復元します。新しい Person インスタンスへの変換は、golang データ型を json 形式に変換し、それを逆方向に golang データ型に戻すプロセスを実現します。
JSON 文字列内のエスケープ文字
JSON 文字列では、一部の文字をエスケープする必要があります。エスケープしないと、構文エラーが発生します。一般的なエスケープ文字は次のとおりです。
意味 | |
---|---|
二重引用符 | |
バックスラッシュ | |
スラッシュ | |
Backspace | ##\f |
\ n | |
\r | |
\t | |
{"name":"Tom","introduction":"I'm a "programmer""}
上記の文字列では、プログラマは二重引用符 (") を使用して最後の単語の二重引用符をエスケープし、それによって JSON エンコーダーを回避しました。エラーが発生しました。
Json エスケープ文字の処理
golang では、json エスケープ文字の処理に json.Marshal を使用できます。この関数は、基本的なエスケープ文字や Unicode コード ポイントを含む、必要な文字をエスケープします。
たとえば、次の構造:
type Person struct { Name string `json:"name"` Gender string `json:"gender"` }
を次の JSON 形式文字列:
{"name":"Tom","gender":"He said, "I'm the best!""}
に変換する必要がある場合、次のコードを使用できます:
p := Person{ Name: "Tom", Gender: `He said, "I'm the best!"`, } data, _ := json.Marshal(p) fmt.Println(string(data))
出力結果は次のとおりです:
{"name":"Tom","gender":"He said, "I'm the best!""}
json.Marshal 関数を使用して p インスタンスを json 形式の文字列にシリアル化すると、二重引用符が自動的に " にエスケープされることがわかります。 json エンコーディング コンバーター エラーを回避します。
golang が提供する json.Marshal 関数は、一般的なエスケープ文字に加えて、制御文字やマルチバイト文字も処理できます。構造データを json 形式の文字にシリアル化できます。 、エスケープする必要がある文字を処理します:
p := Person{ Name: "Tom", Gender: `He said, "I'm the best!"`, } // 处理多字节字符 p.Gender = strings.Replace(p.Gender, "!", "\uff01", -1) // 处理控制字符 p.Gender = strings.Replace(p.Gender, "", "\u0001", -1) data, _ := json.Marshal(p) fmt.Println(string(data))
上記のコードでは、まず golang の標準ライブラリの strings.Replace 関数を使用して、文字列内のマルチバイト文字を対応する UTF-8 コードに置き換えます。ポイント; 次に、同じ方法を使用して文字列内の制御文字を置き換えます。最後に、json.Marshal を使用して p インスタンスを json 形式の文字列にシリアル化し、出力結果は次のようになります:
{"name":"Tom","gender":"He said, "I'm the best!\uff01""}
ご覧のとおりです。 json 文字列内で、エスケープする必要がある文字を対応するエスケープ文字にエスケープしました。これにより、json エンコーダー エラーを回避できます。
概要
golang では、json を使用できます。構造データを簡単にjson形式の文字列に変換し、エスケープが必要な文字を自動的にエスケープするMarshal関数。これにより、json文字列のエラーを回避できます。jsonデータの正確性が保証されます。jsonデータを処理する場合、他のメソッドは次のことを行う必要があります。マルチバイト文字と制御文字の変換に使用されます。
以上がgolang json エスケープ文字の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。