我只知道我们从后端服务器获取数据为JSON格式。首先,为什么后端服务器返回JSON(或过去的XML)而不是对象?当我们想要在客户端处理数据时,为什么我们需要将JSON转换为对象?同样,当我们想要将数据发送回后端服务器时,为什么我们需要将对象转换为JSON?
这是一些引用引用(jfiddle):“JSON Parser还提供了另一个非常有用的方法stringify。此方法接受一个JavaScript对象作为参数,并输出一个JSON格式的字符串。 strong>当您想要将数据发送回服务器时,这非常有用:“
问题1:为什么它有用?
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
问题2:为什么服务器端(后端)无法使用对象但必须使用JSON?
问题3:为什么客户端(前端)无法使用JSON但必须反对?
答案 0 :(得分:1)
您所有问题的答案是:
HTTP不以二进制形式通信,因此您无法来回发送对象。相反,他们需要转换为一些基于文本的系统。 (Base64很常见......还有其他的)。
JSON不是必需的,但它通常用于HTTP通信,因为它很容易与JavaScript对象进行转换。
答案 1 :(得分:1)
在JavaScript中,可以将格式正确的JSON字符串转换为对象。要符合条件,它必须是正确的形状,如下所示:
{
"property1": "value1",
"property2": "value2",
"property3": "value3",
}
作为字符串,它看起来像这样:
const json = "{ "property1": "value1", "property2": "value2", "property3": "value3" }"
除之外,你不能以这种方式使用引号,否则JavaScript解释器会被搞砸,所以你必须逃避它们:
const json = "{ \"property1\": \"value1\", \"property2\": \"value2\", \"property3\": \"value3\" }"
这就是实用程序JSON.stringify()
的功能。它将其变成运输安全的形状。如果要将其转换回对象,请使用JSON.parse()
。
在JavaScript中,您可以执行以下操作:
const object = {
name: 'Bob',
age: 1337,
color: 'neon brown'
}
// I would like to send this to the Frontend now:
const preparedObject = JSON.stringify(object)
// Send it to the Frontend now
sendToFront({ payload: preparedObject })
// Lets pretend the Frontend does this:
const objectFromBackEnd = response.payload
// The Frontend gets it, but it is just a string it can't do anything with, so now we need:
const getObjectBack = JSON.parse(preparedObject)
if (getObjectBack.name === 'Bob') {
console.log('it worked')
}
// 'it worked'
在实践中,您parse
的次数必须与stringify
完全相同,否则JavsScript将无法将字符串化对象转换回文字形式。
我相信你可以想象,如果双引号内的双引号内有双引号,它会变得多么糟糕。 JavaScript可能同样困惑。
要专门回答您的问题,后端(如果它使用的是JavaScript)可以并且只能用于对象。对于前端也是如此,所以问题2和3的答案都是,但你必须确保它们被正确解释。
如果对非对象执行JSON.stringify()
,则会抛出错误。
如果JSON.parse()
对格式不正确的JSON字符串执行操作,则会产生错误。
JSON非常出色,因为它为人类读者提供了超级友好的格式,对非JavaScript机器读者非常友好。与XML和其他类型的完成同样的事情相比,它既人性又机器友好。
您缺少的链接是您需要内化JSON.stringify()
和JSON.parse()
的工作方式。稍微测试一下,删除一些"
,,
和:
个字符,看看它们是如何回应的。
也可以尝试:
const object = {
name: 'Bob',
age: 1337,
color: 'neon brown'
}
console.log('Test 1', JSON.stringify(object))
console.log('Test 2', JSON.stringify(JSON.stringify(object)))
console.log('Test 3', JSON.stringify(JSON.stringify(JSON.stringify(object))))
//Now try adding this after:
console.log(JSON.parse(JSON.parse(JSON.parse(JSON.stringify(JSON.stringify(JSON.stringify(object)))))))
这对任何编程语言都很有用,因为如果你的程序输出一个有效的JSON字符串,那么创建它的方式并不重要。我只是从我的JavaScript代码中做JSON.parse('string')
并开始使用点表示法读取它并迭代JSON“对象”中的所有内容。
您可以在此处阅读更多内容:http://www.json.org/