我的理解是json就是一种特殊格式的字符串,本质上是字符串。
然后我看菜鸟驿站的关于JSON.parse()的定义是:将一个JSON 字符串转换为对象。
const express = require('express')
const app = express()
const port = 4000
app.engine('html',require('express-art-template'))
app.get('/', (req, res) => {res.render('1.html')})
app.get('/hello', (req, res) => {
var b = {a:"bbb"}
res.send(b)
res.end()
})
app.listen(port, () => console.log(`Example app listening on port port!`))
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<title>Document</title>
</head>
<body>
<script>
$.ajax({
url: "/hello",
type: "GET",
success: function(data){
console.log(JSON.parse(data));
}})
</script>
</body>
</html>
上面两块代码是我写的测试程序,第二块代码就是1.html,当在浏览器中输入http://localhost:4000/时会渲染1.html文件,同时1.html会请求/hello的数据也就是变量b。
但是变量b是一个js对象而不是JSON字符串,应该不能用JSON.parse()方法啊?但是我浏览器的控制台中打印出来的却是一个对象,而且没有报错,这是为什么呢?
b 在接口里是个对象,当你 send 的时候,他是以一个 json 字符串返回给前端的.前端拿到这个 json 字符串后,你 JSON.parse 转成了一个对象,然后你输出了一个对象,没错啊.
你不会想着,你上面的 json 返回的直接是一个 js 对象吧.对象传输的时候是要序列化的,你这个地方就是序列化成了 json 字符串.