golang json エスケープ文字

PHPz
リリース: 2023-05-15 11:05:07
オリジナル
1191 人が閲覧しました

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 文字列では、一部の文字をエスケープする必要があります。エスケープしないと、構文エラーが発生します。一般的なエスケープ文字は次のとおりです。

#エスケープ文字 意味 \"二重引用符\バックスラッシュ/スラッシュ\b##\fページ変更\ n改行\rEnter\t水平タブ文字json 文字列でエスケープ文字を使用せず、二重引用符などの特殊文字を文字列に直接記述すると、次のエラーが表示されます。 ##
{"name": "Tom", "introduction": "I'm a "programmer""}
ログイン後にコピー
上記の JSON 文字列では、二重引用符が最後の単語「programmer」の後にエスケープ文字を使用していないため、JSON エンコーダーがこの文字列を正しく認識できません。このエラーは次のように処理できます。 :
Backspace
{"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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!