我正在使用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/
答案 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('}, {'));
答案 1 :(得分:0)
您也可以使用replace
console.log(JSON.stringify(products).replace(/},{/g,'}, {'));
// /},{/g means all occurance of },{
答案 2 :(得分:0)
如果您想要的json输出是:
您可以使用此:
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 来删除换行符(以便可以保证它不会修改用户提供的字符串中的文本),但是我会将其留给其他人去做,因为以上内容足以满足我的用例(而且我认为大多数其他用例)。