Пробел между выходом JSON.stringify

Я использую 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>

Это даст мне результат в этом формате

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

То, что я пытаюсь достичь, - это одно пространство между этими двумя объектами после ",", поэтому вывод будет выглядеть примерно так:

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

Можно посоветовать? Я борюсь с часами и без успеха.

Вот jsfiddle http://jsfiddle.net/2MeMY/1/

Ответ 1

Это может быть не то, что вы хотите, но если вы просто хотите, чтобы он выглядел лучше, я бы порекомендовал:

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/

Ответ 2

Вы также можете сделать это с заменой

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

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

Ответ 3

Если вам нужен вывод 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));