javascript - JSON.stringify : how to skip indentation for one (or more) objects

标签 javascript json indentation

我想缩进所有对象除了某些特定的子对象。

这是我最接近解决该问题的一次。在示例中,我想避免缩进 color:

let obj = {
    colorsPerValue: [
        { value: 0.0, color: { r: 240, g: 59, b: 32 } },
        { value: 0.5, color: { r: 255, g: 255, b: 255 } },
        { value: 1.0, color: { r: 44, g: 162, b: 95 } }
    ]
};
let str = JSON.stringify(obj, replacer, 2);
console.log(str);

replacer(name, val) {
    if (name === 'color') {
        return JSON.stringify(val); // stringify with no indentation
    } else {
        return val; // return as is
    }
};

期望的结果:

{
    colorsPerValue: [
        { 
            value: 0.0, 
            color: { r: 240, g: 59, b: 32 } 
        },
        { 
            value: 0.5, 
            color: { r: 255, g: 255, b: 255 } 
        },
        { 
            value: 1.0, 
            color: { r: 44, g: 162, b: 95 } 
        }
    ]
}

实际结果(你猜对了,return JSON.stringify(val);返回一个序列化的string,这不是我想要的):

{
  "colorsPerValue": [
    {
      "value": 0,
      "color": "{\"r\":240,\"g\":59,\"b\":32}"
    },
    {
      "value": 0.5,
      "color": "{\"r\":255,\"g\":255,\"b\":255}"
    },
    {
      "value": 1,
      "color": "{\"r\":44,\"g\":162,\"b\":95}"
    }
  ]
}

let obj = {
  colorsPerValue: [
    { value: 0.0, color: { r: 240, g: 59, b: 32   } },
    { value: 0.5, color: { r: 255, g: 255, b: 255 } },
    { value: 1.0, color: { r: 44, g: 162, b: 95   } }
  ]
};
let str = JSON.stringify(obj, replacer, 2);
console.log(str);

function replacer(name, val) {
  if (name === 'color') {
    return JSON.stringify(val); // stringify with no indentation
  } else {
    return val; // return as is
  }
};

最佳答案

您可以删除大括号中以 "color": 开头的所有空格。

var obj = {
        colorsPerValue: [
            { value: 0.0, color: { r: 240, g: 59, b: 32 } },
            { value: 0.5, color: { r: 255, g: 255, b: 255 } },
            { value: 1.0, color: { r: 44, g: 162, b: 95 } }
        ]
    },
    str = JSON
        .stringify(obj, null, 2)
        .replace(/("color": \{)([^}]+)/g, (_, a, b) => a + b.replace(/\s+/g, ' '));

console.log(str);

关于javascript - JSON.stringify : how to skip indentation for one (or more) objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50155202/

相关文章:

java - 检索 JSONObject 的字段名称 - Java

c++ - 我如何使用 vim cindent 实现这一点?

python - 巧妙缩进 SQL 语句的算法(Python 实现会很好)

javascript - 由于 exif 数据,从 iPhone 上传的图像显示在侧面

javascript - angularjs 按属性值组合 2 个对象

javascript - 王牌编辑器 "define is not defined"

javascript - (JavaScript) data.split ('\n' ) 不是一个函数

c# - 反序列化json树结构并设置父级

javascript - 嵌套 JSON 数组对象代码不起作用

css - 如何在 Mediawiki 中跨部分继续编号列表