我遇到一个问题,我的文件包含
形式的对象Dog1: {
information: {
color: 'red',
name: 'Tom'
}
}
我正在构建一个程序,它自动从文件中填充我的对象,但当前输出的格式为
"Dog1": {
"information": {
"color": "red",
"name": "Tom"
}
}
我的问题是我需要围绕“红色”和“汤姆”的单引号或双引号,但我不需要其他所有内容。我已经尝试过使用jscodeshift但似乎无法让它运行起来。有人对此有任何提示吗?
非常感谢你的时间,乔
答案 0 :(得分:0)
您的对象是JavaScript对象吗? 但是对象被写入文件,似乎是用JSON格式编写的(JavaScript Object Notation)。
在我看来,那不错。这是存储JavaScript对象的正确方法。如果你真的不想要引号,你可能需要实现自己的逻辑来将对象写入文件。
<强>更新强> 见JSON.Stringify without quotes on properties?。那家伙有同样的问题,解决方案是在调用JSON.stringify()后删除引号。
答案 1 :(得分:0)
我为您快速实现了自定义json序列化器:
function _serialize_object_key(key) {
return /^[a-zA-Z_\$][a-zA-Z_\$0-9]*$/.test(key) ? key : JSON.stringify(key);
}
function _serialize_object(obj, opts, current_indent) {
var arr = [], inner_indent = current_indent + opts.indent_inc;
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
arr.push(inner_indent + _serialize_object_key(key) + ': ' + _json_like_stringify(obj[key], opts, inner_indent));
}
}
return '{\n' + arr.join(',\n') + '\n' + current_indent + '}';
}
function _serialize_array(arr, opts, current_indent) {
var inner_indent = current_indent + opts.indent_inc;
return '[\n' + inner_indent + arr.map(inner_map).join(',\n' + inner_indent) + '\n' + current_indent + ']';
function inner_map(x) {
return _json_like_stringify(x, opts, inner_indent);
}
}
function _json_like_stringify(x, opts, current_indent) {
switch (typeof x) {
case "number":
case "string":
case "boolean":
default:
return JSON.stringify(x);
case "object":
if (x === null) return 'null';
if (Array.isArray(x)) return _serialize_array(x, opts, current_indent);
return _serialize_object(x, opts, current_indent);
}
}
function json_like_stringify(x, indent) {
if (indent === undefined) indent = 2;
var indent_inc = '';
for (var i = 0; i < indent; i++) indent_inc += ' ';
return _json_like_stringify(x, {indent_inc:indent_inc}, '');
}
$('pre').text(json_like_stringify({a:[1,2,3],b:{c:{d:[6,7,"asdasda\"fgdfgdfg",true,null, [1, 2, 3, {' ':' '}, 5, 6, 7, 8, 9, 10, 11]]}}}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre></pre>