Javascript 模板化双引号
Javascript templating double quotes
我有一个问题,我有一个包含我的对象的文件,格式为
Dog1: {
information: {
color: 'red',
name: 'Tom'
}
}
我正在构建一个自动从文件填充我的对象的程序,但当前输出的形式为
"Dog1": {
"information": {
"color": "red",
"name": "Tom"
}
}
我的问题是我需要在 "red" 和 "Tom" 周围加上单引号或双引号,但我不需要在其他所有地方加上它。我试过使用 jscodeshift 但似乎无法正常工作。有人对此有任何提示吗?
非常感谢你抽出时间,乔
您的对象是 JavaScript 对象对吗?
然而对象被写入文件,它似乎是以 JSON 格式(JavaScript Object Notation)写入的。
在我看来,这并没有错。这是存储 JavaScript 对象的正确方法。如果你真的不想要引号,你可能需要实现自己的逻辑来将对象写入文件。
更新:
参见 JSON.Stringify without quotes on properties?。那个人有同样的问题,解决方案是在调用 JSON.stringify().
后删除引号
我很快为您实现了自定义 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>
我有一个问题,我有一个包含我的对象的文件,格式为
Dog1: {
information: {
color: 'red',
name: 'Tom'
}
}
我正在构建一个自动从文件填充我的对象的程序,但当前输出的形式为
"Dog1": {
"information": {
"color": "red",
"name": "Tom"
}
}
我的问题是我需要在 "red" 和 "Tom" 周围加上单引号或双引号,但我不需要在其他所有地方加上它。我试过使用 jscodeshift 但似乎无法正常工作。有人对此有任何提示吗?
非常感谢你抽出时间,乔
您的对象是 JavaScript 对象对吗? 然而对象被写入文件,它似乎是以 JSON 格式(JavaScript Object Notation)写入的。
在我看来,这并没有错。这是存储 JavaScript 对象的正确方法。如果你真的不想要引号,你可能需要实现自己的逻辑来将对象写入文件。
更新: 参见 JSON.Stringify without quotes on properties?。那个人有同样的问题,解决方案是在调用 JSON.stringify().
后删除引号我很快为您实现了自定义 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>