Go_Json_HTMLEscape_Compact

来源:转载


package mainimport ("bytes""encoding/json""fmt""io""strings")//HTMLEscape 函数将添加Buffer中的特殊字符串进行转义(Buffer中本来就有的字节不会转义只会转义后来添加的)//Compact 对这些特殊字符不进行转义 但是有一个作用就是在拼接字符串时 如果后面的字符串有问题那么不添加到Buffer中相当于自动帮我们检查了//Compact 是个很有用的函数试想一下如果不用Compact直接拼接字符串那么如果其中第n个json串格式有问题就会导致后面所有的json串无法解析//而使用了Compact来解析 假如拼接到第n个json串有问题会直接抛弃这个json串而不会去影响到后面json串的解析//比如例子中errJson字符串的格式是有问题的 通过Compact会自动检查所以最后输出的结果是不包含errJson的//特殊字符都有<, >, &, U+2028 and U+2029 转义成 /u003c, /u003e, /u0026, /u2028, /u2029func main() {buf := bytes.NewBufferString("")str := `{"Name":"<wujunbin>", "Age":21}`errJson := `{Name:"<wujunbin>", "Age":21}`//拼接json串fmt.Println(json.Compact(buf, []byte(str)))fmt.Println(json.Compact(buf, []byte(errJson)))bufEscape := bytes.NewBufferString("")//拼接转义的json串 但是不会帮你检查错误json.HTMLEscape(bufEscape, buf.Bytes())//result is {"Name":"/u003cwujunbin/u003e","Age":21}fmt.Printf("%s /n", string(bufEscape.Bytes()))type Person struct {Name stringAge int}decoder := json.NewDecoder(strings.NewReader(string(buf.Bytes())))for {var p Personif err := decoder.Decode(&p); err == io.EOF {break} else if err != nil {fmt.Println(err)break}fmt.Println(p)}}

版权声明:本文为博主原创文章,未经博主允许不得转载。



分享给朋友:
您可能感兴趣的文章:
随机阅读: