Rumah > pembangunan bahagian belakang > Golang > watak melarikan diri golang json

watak melarikan diri golang json

PHPz
Lepaskan: 2023-05-15 11:05:07
asal
1210 orang telah melayarinya

Dalam golang, json ialah format pertukaran data yang biasa digunakan, yang boleh mensiri data berstruktur dengan mudah ke dalam format json, dan juga boleh menyahsiri kembali kepada jenis data asal daripada data format json. Dalam proses menggunakan json, kadangkala anda perlu melarikan diri beberapa aksara khas untuk mengelakkan ralat dalam rentetan json. Jadi, bagaimana untuk melepaskan watak json dalam golang? Artikel ini akan memperkenalkannya kepada anda secara terperinci.

json dalam golang

Dalam golang, anda boleh menggunakan pakej pengekodan/json untuk memproses data json. Pakej ini menyediakan fungsi Marshal dan Unmarshal, yang boleh menukar mana-mana jenis data dalam golang kepada rentetan format json dan menukar rentetan format json kembali kepada jenis data asal dalam golang. Berikut ialah contoh mudah:

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)
}
Salin selepas log masuk

Hasil keluarannya ialah:

{"name":"Tom","age":20}
{Tom 20}
Salin selepas log masuk

Seperti yang anda boleh lihat, dengan mensirikan contoh struktur Person ke dalam rentetan format json, dan kemudian menyahsirikannya dan Memulihkannya kepada contoh Orang baharu menyedari proses menukar jenis data golang ke dalam format json, dan kemudian menukarnya kembali kepada jenis data golang dalam arah yang bertentangan.

Escape aksara dalam json string

Dalam json string, terdapat beberapa aksara yang perlu dilepaskan, jika tidak, ia akan menyebabkan ralat sintaks. Aksara melarikan diri biasa termasuk:

转义字符含义
"双引号
反斜杠
/正斜杠
b退格
f换页
n换行
r回车
t水平制表符

Jika anda tidak menggunakan aksara melarikan diri dalam rentetan json, tetapi terus menulis aksara khas seperti petikan berganda ke dalam rentetan, ralat berikut akan berlaku:

{"name": "Tom", "introduction": "I'm a "programmer""}
Salin selepas log masuk

Dalam rentetan json di atas, tanda petikan berganda tidak menggunakan aksara melarikan diri selepas perkataan terakhir "pengaturcara", menyebabkan pengekod json tidak mengenali rentetan ini dengan betul. Ralat ini boleh dikendalikan seperti berikut:

{"name":"Tom","introduction":"I'm a "programmer""}
Salin selepas log masuk

Dalam rentetan di atas, pengaturcara telah menggunakan petikan berganda (") untuk melepaskan petikan berganda dalam perkataan terakhir, dengan itu mengelakkan ralat pengekod json.

Pemprosesan aksara JSON escape

Dalam golang, anda boleh menggunakan json.Marshal untuk pemprosesan aksara json escape >Sebagai contoh, jika anda perlu menukar struktur berikut:

type Person struct {
    Name   string `json:"name"`
    Gender string `json:"gender"`
}
Salin selepas log masuk

ke dalam rentetan format json berikut:

{"name":"Tom","gender":"He said, "I'm the best!""}
Salin selepas log masuk
Salin selepas log masuk

, anda boleh menggunakan Kod berikut:

p := Person{
    Name:   "Tom",
    Gender: `He said, "I'm the best!"`,
}
data, _ := json.Marshal(p)
fmt.Println(string(data))
Salin selepas log masuk

The hasil keluaran ialah:

{"name":"Tom","gender":"He said, "I'm the best!""}
Salin selepas log masuk
Salin selepas log masuk

Seperti yang anda lihat, apabila menggunakan fungsi json.Marshal untuk mensiri instance p ke dalam rentetan dalam format json, petikan berganda dilepaskan secara automatik sebagai " , dengan itu mengelakkan ralat pengekod json.

Selain aksara melarikan diri biasa, fungsi json.Marshal yang disediakan oleh golang juga boleh mengendalikan aksara kawalan dan aksara berbilang bait. Kita boleh memproses aksara yang perlu dilepaskan sebelum menyusun data struktur menjadi rentetan dalam format 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))
Salin selepas log masuk

Dalam kod di atas, mula-mula gunakan rentetan. Gantikan fungsi dalam perpustakaan standard golang , gantikan berbilang- aksara bait dalam rentetan dengan titik kod UTF-8 yang sepadan kemudian gunakan kaedah yang sama untuk menggantikan aksara kawalan dalam rentetan. Akhir sekali, gunakan json.Marshal untuk menyerikan contoh p ke dalam rentetan dalam format json Hasil output ialah:

{"name":"Tom","gender":"He said, "I'm the best!\uff01""}
Salin selepas log masuk

Seperti yang anda lihat, dalam rentetan json, kami telah melarikan diri daripada semua aksara yang perlu. melarikan diri. Ini boleh mengelakkan ralat pengekod json.

Ringkasan

Dalam golang, anda boleh menggunakan fungsi json.Marshal untuk menukar data struktur dengan mudah kepada rentetan dalam format json dan secara automatik melepaskan aksara yang perlu dilepaskan. Ini boleh mengelakkan ralat dalam rentetan json dan memastikan ketepatan data json. Apabila memproses data json, kaedah lain perlu digunakan untuk penukaran apabila memproses aksara berbilang bait dan aksara kawalan.

Atas ialah kandungan terperinci watak melarikan diri golang json. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan