-2

我有一个问题,我有一个文件,其中包含表单中的对象

Dog1: {
  information: {
    color: 'red',
    name: 'Tom'
  }
}

我正在构建一个程序,它会自动从文件中填充我的对象,但当前输出的形式为

"Dog1": {
  "information": {
    "color": "red",
    "name": "Tom"
  }
}

我的问题是我需要在“red”和“Tom”周围加上单引号或双引号,但其他所有内容都不需要。我曾尝试使用 jscodeshift,但似乎无法正常工作。有人对此有任何提示吗?

非常感谢您的宝贵时间,乔

4

2 回答 2

0

你的对象是一个 JavaScript 对象吧?然而,对象被写入文件,它似乎是以 JSON 格式(JavaScript Object Notation)编写的。

在我看来,这并没有错。这是存储 JavaScript 对象的正确方法。如果您真的不想要引号,您可能需要实现自己的逻辑来将对象写入文件。

更新: 请参阅JSON.Stringify 不带引号的属性?. 那家伙也有同样的问题,解决方法是在调用 JSON.stringify() 后删除引号。

于 2016-01-11T10:00:50.627 回答
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>

于 2016-01-11T11:47:26.657 回答