Как создать объект Javascript минимального размера? - PullRequest
2 голосов
/ 01 октября 2019

Как создать сериализацию Javascript минимального размера для объекта Javascript? По существу, JSON.stringify со всеми ненужными кавычками удалены. (Поддерживаются только базовые типы данных JSON, а не даты и т. Д.)

Например, JSON:

{
  "pi": 3.14,
  "e!": 4.26
}

станет:

{pi:3.14,"e!":4.26}

Редактировать: Результат не допустимый JSON, но - допустимый Javascript.

1 Ответ

1 голос
/ 01 октября 2019

Скопировано из https://stackoverflow.com/a/11233515/916000 и изменено:

function stringify(obj_from_json) {
  if (typeof obj_from_json !== "object") {
    return JSON.stringify(obj_from_json);
  } else {
    if (Array.isArray(obj_from_json)) {
      // if the array contains an object
      var arr = [];
      for (var i = 0, len = obj_from_json.length; i < len; i++) {
        arr.push(stringify(obj_from_json[i]));
      }
      return "[" + arr.join(",") + "]";
    } else {
      var props = Object
        .keys(obj_from_json)
        .map(function(key) {
          return (new RegExp(/^[1-9a-zA-Z_$][a-zA-Z0-9_$.]*$/).test(key) ? key : "\"" + key + "\"") + ":" + stringify(obj_from_json[key]);
        }).join(",");
      return "{" + props + "}";
    }
  }
}


console.log(stringify({
  "pi": 3.14,
  "e!": 4.26
}));

console.log(stringify([{
  "adjacencies": [{
    "nodeTo": "graphnode2",
    "nodeFrom": "graphnode1",
    "data": {
      "$color": "#557EAA"
    }
  }],
  "data": {
    "$color": "#EBB056",
    "$type": "triangle",
    "$dim": 9
  },
  "id": "graphnode1",
  "name": "graphnode1"
}, {
  "adjacencies": [],
  "data": {
    "$color": "#EBB056",
    "$type": "triangle",
    "$dim": 9
  },
  "id": "graphnode2",
  "name": "graphnode2"
}]));

console.log(stringify({1: 2}));
console.log(stringify({"000": 42}));
console.log(stringify({1.26: 42}));

Редактировать : Добавлена ​​поддержка массива объектов. Редактировать : исправлено преобразование массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...