>  기사  >  백엔드 개발  >  golang json 이스케이프 문자

golang json 이스케이프 문자

PHPz
PHPz원래의
2023-05-15 11:05:071139검색

golang에서 json은 일반적으로 사용되는 데이터 교환 형식입니다. 구조화된 데이터를 json 형식으로 쉽게 직렬화할 수 있고 json 형식 데이터에서 원래 데이터 유형으로 다시 역직렬화할 수도 있습니다. json을 사용하는 과정에서 json 문자열의 오류를 방지하기 위해 일부 특수 문자를 이스케이프해야 하는 경우가 있습니다. 그렇다면 golang에서 json 문자를 이스케이프하는 방법은 무엇입니까? 이번 글에서는 이에 대해 자세히 소개하겠습니다.

json in golang

golang에서는 인코딩/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페이지 변경nLine FeedrEntert가로 탭
이스케이프 문자 의미
" 큰따옴표
백슬래시
/
if json 문자열을 사용하지만 문자열에 큰따옴표 및 기타 특수 문자를 직접 쓰면 다음 오류가 발생합니다.

{"name": "Tom", "introduction": "I'm a "programmer""}

위 json 문자열에서 큰따옴표는 마지막 단어에 있습니다. "programmer" 뒤에 이스케이프 문자가 사용되지 않습니다.

{"name":"Tom","introduction":"I'm a "programmer""}

위 문자열에서 프로그래머는 큰따옴표(")를 사용하여 단어 내의 마지막 큰따옴표를 이스케이프 처리하여 json 인코더 오류를 방지했습니다.

Json 이스케이프 문자 처리

golang에서는 json.Marshal을 사용하여 json 이스케이프 문자 처리를 할 수 있습니다. 이 함수는 기본 이스케이프 문자 및 유니코드 코드 포인트를 포함하여 필요한 모든 문자를 이스케이프합니다.

예를 들어

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 인코더의 오류를 방지합니다.

일반적인 이스케이프 문자 외에도 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 형식의 문자열로 변환하고 출력 결과는 다음과 같습니다.

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

json 문자열에서 이스케이프해야 하는 문자를 해당 이스케이프 문자로 이스케이프 처리한 것을 볼 수 있습니다.

요약.

golang에서는 구조 데이터를 json 형식 문자열로 쉽게 변환하고 이스케이프해야 하는 문자를 자동으로 이스케이프할 수 있습니다. json 문자열의 오류를 방지하고 json 데이터를 처리할 때 다른 방법이 필요합니다.

멀티바이트 문자 및 제어 문자 변환에 사용됩니다.

위 내용은 golang json 이스케이프 문자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.