JSON.stringify输出之间的空格

时间:2014-07-18 22:40:52

标签: javascript jquery html arrays

我正在使用Jquery从页面获取所有产品名称而不是将其放在数组上。我正在使用此代码

 <script type="text/javascript">
 jQuery(document).ready(function($) {
    var products = $(".product-name").map(function() {
    return { name: $(this).text() }
 }) .get();
 console.log(JSON.stringify(products));
 });
 </script>

这给了我这种格式的输出

[{&#34; name&#34;:&#34;示例产品名称&#34;},{&#34;名称&#34;:&#34;示例产品名称2&#34; }]

我想要实现的是在&#34;,&#34;之后在这两个对象之间有一个空格。所以输出看起来像这样

[{&#34; name&#34;:&#34;示例产品名称&#34;},{&#34;名称&#34;:&#34;示例产品名称2&#34; }]

有什么建议吗?我几个小时都在挣扎,没有成功。

这是jsfiddle http://jsfiddle.net/2MeMY/1/

3 个答案:

答案 0 :(得分:12)

这可能不是你想要的,但如果你只是想让它看起来更好,我会建议:

console.log(JSON.stringify(products, null, 2));

会给你

[
  {
    "name": "Sample Product Name"
  },
  {
    "name": "Sample Product Name 2"
  }
]

在控制台中。如果你真的只想要逗号之前的空格,你可以这样做:

console.log(JSON.stringify(products).split('},{').join('}, {'));

http://jsfiddle.net/2MeMY/3/

答案 1 :(得分:0)

您也可以使用replace

console.log(JSON.stringify(products).replace(/},{/g,'}, {')); 

// /},{/g means all occurance of },{

答案 2 :(得分:0)

如果您想要的json输出是:

  1. 单行
  2. 属性名称和属性值(以及项目之间)之间有空格
  3. 每个逗号和下一个道具名称/项目之间都有空格

您可以使用此:

function Stringify_WithSpaces(obj) {
	let result = JSON.stringify(obj, null, 1); // stringify, with line-breaks and indents
	result = result.replace(/^ +/gm, " "); // remove all but the first space for each line
	result = result.replace(/\n/g, ""); // remove line-breaks
	result = result.replace(/{ /g, "{").replace(/ }/g, "}"); // remove spaces between object-braces and first/last props
	result = result.replace(/\[ /g, "[").replace(/ \]/g, "]"); // remove spaces between array-brackets and first/last items
	return result;
}

let obj = [{name: "Sample Product Name"}, {name: "Sample Product Name 2"}];
console.log("Stringified with spaces: " + Stringify_WithSpaces(obj));

这是单行表达式的功能:

JSON.stringify(obj, null, 1).replace(/^ +/gm, " ").replace(/\n/g, "").replace(/{ /g, "{").replace(/ }/g, "}").replace(/\[ /g, "[").replace(/ \]/g, "]")

扩展打字稿版本


以下是带有选项的更详细的版本(在Typescript中):

export class ToJSON_WithSpaces_Options {
    insideObjectBraces = false;
    insideArrayBrackets = false;
    betweenPropsOrItems = true;
    betweenPropNameAndValue = true;
}
export function ToJSON_WithSpaces(obj, options?: Partial<ToJSON_WithSpaces_Options>) {
    options = Object.assign({}, new ToJSON_WithSpaces_Options(), options);

    let result = JSON.stringify(obj, null, 1); // stringify, with line-breaks and indents
    result = result.replace(/^ +/gm, " "); // remove all but the first space for each line
    result = result.replace(/\n/g, ""); // remove line-breaks
    if (!options.insideObjectBraces) result = result.replace(/{ /g, "{").replace(/ }/g, "}");
    if (!options.insideArrayBrackets) result = result.replace(/\[ /g, "[").replace(/ \]/g, "]");
    if (!options.betweenPropsOrItems) result = result.replace(/, /g, ",");
    if (!options.betweenPropNameAndValue) result = result.replace(/": /g, `":`);
    return result;
}

理想情况下,这种函数将应用正则表达式 prior 来删除换行符(以便可以保证它不会修改用户提供的字符串中的文本),但是我会将其留给其他人去做,因为以上内容足以满足我的用例(而且我认为大多数其他用例)。