当前位置: 首页 > 知识库问答 >
问题:

如何打印类似JSON格式的循环结构?

昌博易
2023-03-14

我有一个很大的对象想要转换成JSON并发送。但它具有圆形结构。我想抛开任何存在的循环引用,发送任何可以被强化的东西。我该怎么做?

多谢了。

var obj = {
  a: "foo",
  b: obj
}

我想把obj缩写成:

{"a":"foo"}

共有2个答案

南宫俊喆
2023-03-14

在node.js中,可以使用util.inspect(对象)。它自动将循环链接替换为“[circular]”。

尽管它是内置的(不需要安装),但您必须导入它

import * as util from 'util' // has no default export
import { inspect } from 'util' // or directly
// or 
var util = require('util')
console.log(util.inspect(myObject))

还要注意,您可以传递options对象以进行检查(请参阅上面的链接)

inspect(myObject[, options: {showHidden, depth, colors, showProxy, ...moreOptions}])

请阅读并给下面的留言者点赞...

况鸿雪
2023-03-14

json.stringify与自定义替换器一起使用。例如:

// Demo: Circular reference
var circ = {};
circ.circ = circ;

// Note: cache should not be re-used by repeated calls to JSON.stringify.
var cache = [];
JSON.stringify(circ, (key, value) => {
  if (typeof value === 'object' && value !== null) {
    // Duplicate reference found, discard key
    if (cache.includes(value)) return;

    // Store value in our collection
    cache.push(value);
  }
  return value;
});
cache = null; // Enable garbage collection

本例中的替换器不是100%正确的(取决于您对“重复”的定义)。在以下情况下,将丢弃值:

var a = {b:1}
var o = {};
o.one = a;
o.two = a;
// one and two point to the same object, but two is discarded:
JSON.stringify(o, ...);

但这个概念仍然存在:使用自定义替换器,并跟踪解析的对象值。

作为ES6中编写的实用函数:

// safely handles circular references
JSON.safeStringify = (obj, indent = 2) => {
  let cache = [];
  const retVal = JSON.stringify(
    obj,
    (key, value) =>
      typeof value === "object" && value !== null
        ? cache.includes(value)
          ? undefined // Duplicate reference found, discard key
          : cache.push(value) && value // Store value in our collection
        : value,
    indent
  );
  cache = null;
  return retVal;
};

// Example:
console.log('options', JSON.safeStringify(options))
 类似资料:
  • 问题内容: 我有一个大对象,想要转换为JSON并发送。但是它具有圆形结构。我想扔掉任何存在的循环引用并发送任何可以字符串化的东西。我怎么做? 谢谢。 我想将obj字符串化为: 问题答案: 与自定义替换器一起使用。例如: 在此示例中,替换器不是100%正确的(取决于您对“重复”的定义)。在以下情况下,将丢弃一个值: 但是概念仍然存在:使用自定义替换器,并跟踪已解析的对象值。

  • 我只想用下面的公式从任何给定的数字创建一个因子列表。我不允许使用列表,因此,我模仿使用字符串如下: 例如,假设我们选择num=12:

  • 这是这个问题的后续问题。我需要prettyprint一个python dict(这样我可以直观地检查/修改它),并且我需要有json格式的输出(带双引号)。 模块pretty打印dict但使用单引号(而不是JSON!)。这是链接的其他问题/答案的主题。

  • 如何在有向加权图中找到负循环。我知道Bellman-Ford算法是如何工作的,它告诉我是否存在可达到的负循环。但它没有明确地命名它。 如何获得循环的实际路径v1,v2,…vk,v1? 在应用标准算法后,我们已经进行了n−1次迭代,不可能有进一步的改进。如果我们仍然可以降低到节点的距离,则存在负循环。 假设edge(v, u)是bellman ford算法在第n次迭代中失败的边缘-d(u)

  • 我正在从这个网站上阅读JSON格式的数据https://data.melbourne.vic.gov.au/api/views/ntht-5rk7/rows.json?accessType=DOWNLOAD 我开发了一个Python程序,将数据假脱机到CSV文件中。我花了一段时间才理解了这个系统的结构。 Python中有没有一种方法可以扫描文件,然后打印出文件字典结构和数据列表结构?这将有助于我在

  • 问题内容: 我试图从我的postgres数据库中检索一些数据,并将它们打印为json。我成功地在没有json的情况下打印了它们,但我在json中需要它们。 main.go: 这是我访问localhost:1337 / db时得到的 这是终端上的输出: 有人知道是什么问题吗? 问题答案: 该包使用反射(结构的包),以存取字段。您需要导出结构的字段以使其起作用(以大写字母开头): 扫描时: 引用自: