我手头上有以下问题: 如果我尝试使用以下样式将 json 发送到 api,它可以正常工作:
{ "key": "value", "key": value }
如果我使用以下格式,你似乎总是用JavaScript得到它不起作用:
{ key: "value", key: value }
JSON.stringify 也不起作用,因为它似乎需要一个对象而不是字符串
朋友,JSON 语法虽然非常有用,但非常有限。
当然,根据后端的 JSON 解析器,它可以允许使用不带双引号的键,但这将是所述解析器的奇怪行为......对于浏览器
JSON
api 那么你需要保持常规规则(包括双引号键)。
在浏览器级别,您可以使用
JSON.stringify()
将几乎任何实例转换为有效的 JSON 字符串。包括文字。 JSON.parse()
将需要一个有效的 JSON 字符串作为参数,如果该字符串不是有效的 JSON,则计算结果为空值。
const literalString = "my literal string";
const literalNumber = Date.now();
const literalObject = { literalString, literalNumber };
// EXAMPLE 1
const example1 = JSON.stringify(literalString);
// Example 2
const example2 = JSON.stringify(literalNumber);
// Example 3
const example3 = JSON.stringify(literalObject);
// Example 4
const example4 = JSON.stringify(true);
// Example 5 // Invalid use
const example5 = JSON.stringify(class Something {});
console.log
({
example1, example2, example3, example4, example5,
});
console.log('Parsed Values:');
console.log
({
example1: example1 ? JSON.parse(example1) : undefined,
example2: example2 ? JSON.parse(example2) : undefined,
example3: example3 ? JSON.parse(example3) : undefined,
example4: example4 ? JSON.parse(example4) : undefined,
example5: example5 ? JSON.parse(example5) : undefined,
});
addEventListener
(
'error', errorEvent => console.warn(errorEvent.error.message)
);
console.log('Additional Test:');
console.log(JSON.parse("{key: \"Value\"}"));
.as-console-wrapper { min-height: 100%; }
注意:仍然有一些
JSON.stringify
/JSON.parse
无法识别的文字,例如 BigInt
、类、函数以及可能更多...但几乎一切都会正常工作。