JSON.isRawJSON()
JSON.isRawJSON()
静态方法测试一个值是否是由 JSON.rawJSON()
返回的对象。
语法
js
JSON.isRawJSON(value)
参数
value
-
要测试的值。
返回值
如果 value
是由 JSON.rawJSON()
创建的,则返回 true
;否则返回 false
。
描述
“原始 JSON”对象在序列化为 JSON 时,会被视为已经是 JSON 片段。此外,由于 JSON.rawJSON()
的工作方式,原始 JSON 保证是语法上有效的 JSON。有关原始 JSON 对象的形状和行为的更多信息,请参阅 JSON.rawJSON()
。此方法的存在是为了允许其他序列化库为原始 JSON 对象实现类似于 JSON.stringify()
的行为。
示例
使用 JSON.isRawJSON()
以下示例演示了如何使用 JSON.isRawJSON()
来测试对象是否由 JSON.rawJSON()
返回。它实现了一个自定义序列化程序,该序列化程序将数据序列化为类似 YAML 的格式。
js
function mySerializer(value, indent = "") {
if (typeof value !== "object" || value === null) {
return JSON.stringify(value);
}
if (JSON.isRawJSON(value)) {
return value.rawJSON;
}
const subIndent = `${indent} `;
if (Array.isArray(value)) {
return `- ${value.map((v) => mySerializer(v, subIndent)).join(`\n${indent}- `)}`;
}
return Object.entries(value)
.map(([key, value]) => {
const subValue = mySerializer(value, subIndent);
if (subValue.includes("\n")) {
return `${key}:\n${subIndent}${subValue}`;
}
return `${key}: ${subValue}`;
})
.join(`\n${indent}`);
}
console.log(
mySerializer({
name: "Josh",
userId: JSON.rawJSON("12345678901234567890"),
friends: [
{ name: "Alice", userId: JSON.rawJSON("9876543210987654321") },
{ name: "Bob", userId: JSON.rawJSON("56789012345678901234") },
],
}),
);
// name: "Josh"
// userId: 12345678901234567890
// friends:
// - name: "Alice"
// userId: 9876543210987654321
// - name: "Bob"
// userId: 56789012345678901234
如果在上面的示例中,userId
值不是由 JSON.rawJSON()
创建的,而是直接作为数字传递的,那么由于 JS 浮点数精度限制,我们将提前损失精度。
js
console.log(
mySerializer({
name: "Josh",
userId: 12345678901234567890,
friends: [
{ name: "Alice", userId: 9876543210987654321 },
{ name: "Bob", userId: 56789012345678901234 },
],
}),
);
// name: "Josh"
// userId: 12345678901234567000
// friends:
// - name: "Alice"
// userId: 9876543210987655000
// - name: "Bob"
// userId: 56789012345678900000
规范
规范 |
---|
JSON.parse 源文本访问 # sec-json.israwjson |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。