嵌套Javascript对象的输出内容

嵌套Javascript对象的输出内容,javascript,json,Javascript,Json,我正在尝试编写一个Javascript函数,它接受一个对象并返回一个经过修饰的JSON样式字符串以进行调试。我尝试迭代每个对象属性并记录键和值,但嵌套对象显示为[object object]。如何编写一个短函数,将嵌套对象转换为可以打印到控制台的多行字符串 不幸的是,我无法在我的环境(iAd Producer)中使用JSON.stringify函数。我正在寻找一个简单的功能,我可以复制粘贴 例如: stringify({ data: { hello: 'world', with: { neste

我正在尝试编写一个Javascript函数,它接受一个对象并返回一个经过修饰的JSON样式字符串以进行调试。我尝试迭代每个对象属性并记录键和值,但嵌套对象显示为
[object object]
。如何编写一个短函数,将嵌套对象转换为可以打印到控制台的多行字符串

不幸的是,我无法在我的环境(iAd Producer)中使用
JSON.stringify
函数。我正在寻找一个简单的功能,我可以复制粘贴

例如:

stringify({ data: { hello: 'world', with: { nested: 'objects' } } })
应返回:

{
  "data": {
    "hello": "world",
    "with": {
      "nested": "objects"
    }
  }
}

因为这只是为了调试,所以可以编写一个简单的递归函数来字符串化对象的内容。请注意,这不适用于日期对象和其他一些对象(而是打印
[对象日期]
等)

如果您想确保涵盖所有边缘案例,并且生成的是有效的生产级JSON,请使用类似的方法

-


因为这只是为了调试,所以可以编写一个简单的递归函数来字符串化对象的内容。请注意,这不适用于日期对象和其他一些对象(而是打印
[对象日期]
等)

如果您想确保涵盖所有边缘案例,并且生成的是有效的生产级JSON,请使用类似的方法

-


如果您没有可用的JSON方法,可以包括一个库以使其可用:

然后可以像往常一样对两个空格缩进的JSON执行
JSON.stringify(myobj,null,2)


使用库的最大优点之一是它经过了彻底的测试,考虑了边缘情况,并满足了需要。

如果您没有可用的JSON方法,您可以包括一个库以使其可用:

然后可以像往常一样对两个空格缩进的JSON执行
JSON.stringify(myobj,null,2)


使用库的最大优点之一是,它经过了彻底的测试,考虑了边缘案例,并满足了需要。

@dandavis:这有很多地方无法处理。克里斯:听丹的建议。我同意json2是正确的防弹解决方案。已修复了空值和数字,并添加了日期的合理输出-仅用于调试。@dandavis:这不能处理很多问题。克里斯:听丹的建议。我同意json2是正确的防弹解决方案。已修复空值和数字,并添加了日期的合理输出-仅用于调试。建议伴随向下投票将不胜感激。。。这是同事提出的合理问题。请花点时间通过编辑或建议编辑来改进问题。如果您能提出建议,并附上否决票,我们将不胜感激。。。这是同事提出的合理问题。请花点时间通过编辑或建议编辑来改进问题。
function stringify(object, indentation) {
  if (typeof indentation === 'undefined') {
    indentation = 0;
  }

  var items = [];

  for (var key in object) {
    if (object.hasOwnProperty(key)) {
      var value;

      switch (typeof object[key]) {
        case 'object':
          var type = Object.prototype.toString.call(object[key]);

          switch (type) {
            case '[object Null]':
              value = 'null';
              break;

            case '[object Array]':
            case '[object Object]':
              value = stringify(object[key], indentation + 2);
              break;

            default:
              value = type;
          }
          break;

        case 'string':
          value = '"' + object[key] + '"'
          break;

        default:
          value = object[key];
      }

      items.push(Array(indentation + 3).join(' ') + '"' + key + '": ' + value);
    }
  }

  return '{\n'
         + items.join(',\n') + '\n'
         + Array(indentation + 1).join(' ') + '}';
}
// Example:
console.log(stringify({ data: { hello: 'world', with: { nested: 'objects' } } }));