在 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 字符串执行 JSON.parse(),则会引发错误。
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/