javascript - 限制 JSON 字符串化深度

标签 javascript json stringify

当使用 JSON.stringify(或类似的东西)对对象进行字符串化时,有一种方法可以限制字符串化深度,即只进入对象树的 n 层并忽略之后的所有内容(或者更好:在其中放置占位符,表示遗漏了某些内容)?

我知道 JSON.stringify 采用 function (key, value) 形式的替换函数,但我没有找到获得深度的方法当前键值对的原始对象交给替换函数。

有没有办法使用默认的 JSON.stringify 实现来做到这一点?还是我已经到了应该自己实现字符串化的地步? 或者您可以推荐另一个具有此选项的字符串化库?

最佳答案

我想在不包含第三方库/过多代码的情况下在第一级对对象进行字符串化。

如果您也在寻找相同的内容,这里有一个快速的单线:

var json = JSON.stringify(obj, function (k, v) { return k && v && typeof v !== "number" ? (Array.isArray(v) ? "[object Array]" : "" + v) : v; });

顶级对象没有键,所以它总是简单地返回,但是任何不是下一级“数字”的东西都将被转换为字符串,包括。数组的特殊情况,否则会暴露得更多。

如果你不喜欢这种特殊的数组情况,请使用我的旧解决方案,我也改进了:

var json = JSON.stringify(obj, function (k, v) { return k && v && typeof v !== "number" ? "" + v : v; }); // will expose arrays as strings.

在顶层传递数组而不是对象仍然适用于两种解决方案。

示例:

var obj = {
  keyA: "test",
  keyB: undefined,
  keyC: 42,
  keyD: [12, "test123", undefined]
}
obj.keyD.push(obj);
obj.keyE = obj;

var arr = [12, "test123", undefined];
arr.push(arr);

var f = function (k, v) { return k && v && typeof v !== "number" ? (Array.isArray(v) ? "[object Array]" : "" + v) : v; };
var f2 = function (k, v) { return k && v && typeof v !== "number" ? "" + v : v; };

console.log("object:", JSON.stringify(obj, f));
console.log("array:", JSON.stringify(arr, f));
console.log("");
console.log("with array string cast, so the array gets exposed:");
console.log("object:", JSON.stringify(obj, f2));
console.log("array:", JSON.stringify(arr, f2));

关于javascript - 限制 JSON 字符串化深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16466220/

相关文章:

javascript - 带方括号的 JSON.stringify

javascript - 在 JS 中定义类(ES5 与原型(prototype))

javascript - Apostrope Js - 上传文件 (apostrope-pieces-submit-widgets)

javascript - d3 JSON 多折线图

javascript - 加载本地 .json 文件时,jQuery $.when().done() 无法按预期使用 JSONP

r - 在 R 中,将列表转换为 POST 请求正文的字符串化 JSON

javascript - 使用 JSON 对象数据填充 html 表

javascript - Chrome headless 渲染完全错误到 pdf

javascript - 如何忽略 Istanbul 尔覆盖率报告中的函数 _interopRequireDefault?

javascript - 需要从对象文字(JSON字符串/对象)中找到键和值对