[json( ),jsonp( ),xml( )|青训营笔记]

89 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第9天

jsonp:

jsonp是json的一种“使用模式”,可以让网页从别的域名(网站)获取资料,即跨域读取数据。

因为同源策略所以当我们从不同的域访问数据时需要使用jsonp。同源策略是浏览器的安全功能。

jsonp的核心则是动态的添加

json:

json 是javascript对象表示法

json是轻量级的数据交换格式

json是独立于语音的

json具有自我描述性,更容易理解

json文本格式在语法上于创建JavaScript对象的代码是相同的,无需解释,JavaScript程序能够使用内建的eval()函数,用json数据生成原生的JavaScript对象。

json语法是JavaScript的对象表示法语法的子集

语法规则:

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组

XML:

XML是可扩展标记语言。是一门语言。XML被设计用来传输和存储数据。

  • XML 指可扩展标记语言(EXtensible Markup Language)。

  • XML 是一种很像HTML的标记语言。

  • XML 的设计宗旨是传输数据,而不是显示数据。

  • XML 标签没有被预定义。您需要自行定义标签。

  • XML 被设计为具有自我描述性。

  • XML 是 W3C 的推荐标准。

JSON与XML相同之处:

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

为什么使用 JSON?

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML

  • 读取 XML 文档
  • 使用 XML DOM 来循环遍历文档
  • 读取值并存储在变量中

使用 JSON

  • 读取 JSON 字符串

  • 用 eval() 处理 JSON 字符串

以下是学习实战代码:(访问时在浏览器输入locahost:8080即可看到8080默认页的情况,别的输入 localhost:8080/xxxx(为json1/xml/jsonp))

package main

import (
	"github.com/gin-gonic/gin"

	"net/http"
)

type Article struct {
	Title   string //`json :"title"`
	Desc    string //`json :"desc"`
	Content string //`json :"content"`
}

func main() {

	r := gin.Default()
	r.GET("/", func(c *gin.Context) {
		c.String(200, "zkdokd")
	})
	r.GET("/json1", func(c *gin.Context) {
		c.JSON(200, map[string]interface{}{
			"success": true,
			"'msg":    "你好Gin",
		})
	})
	r.GET("/json2", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"success": true,
			"'msg":    "你好Gin",
		})
	})
	r.GET("/json3", func(c *gin.Context) {
		a := &Article{
			Title:   "我是标题",
			Content: "我是测试",
			Desc:    "我是描述",
		}

		c.JSON(200, a)
	})

	//http://localhost:8080/jsonp?callback=xxxx(格式 可以将xxxx传入页内)
	//JSONP请求
	r.GET("/jsonp", func(c *gin.Context) {
		a := &Article{
			Title:   "我是标题-jsonp",
			Content: "我是测试",
			Desc:    "我是描述",
		}

		c.JSONP(200, a)
	})

	r.GET("/xml", func(c *gin.Context) {

		c.XML(http.StatusOK, gin.H{

			"sunceeee": true,
			"msg":      "你好GIN 我是XML",
		})
	})
	r.Run()
}