Go_Json_HTMLEscape_Compact

u012807459 · · 3064 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main

import (
	"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, \u2029
func 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 string
		Age  int
	}
	decoder := json.NewDecoder(strings.NewReader(string(buf.Bytes())))
	for {
		var p Person
		if err := decoder.Decode(&p); err == io.EOF {
			break
		} else if err != nil {
			fmt.Println(err)
			break
		}
		fmt.Println(p)
	}

}

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


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:u012807459

查看原文:Go_Json_HTMLEscape_Compact

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3064 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传