Minify JSON с регулярным выражением - PullRequest
0 голосов
/ 05 марта 2020

Описание проблемы

Я хочу уменьшить JSON. Значение:

Желаемый результат

до

{
  "keyOne": "First Value",
  "keyTwo": "Second Value"
}

после

{"keyOne": "First Value", "keyTwo": "Second Value"}

Я хочу чтобы добиться этого, используя RegEx.

Я пытался заменить \s пустой строкой. Но это приводит к нежелательному результату: пробелы также удаляются из значений:

Результат попытки решения

до

{
  "keyOne": "First Value",
  "keyTwo": "Second Value"
}

после

{"keyOne": "FirstValue", "keyTwo": "SecondValue"}

Исследования завершены / попытки решения

  • Поиск в Google и Stackoverflow, но безуспешно, поскольку все найденные вопросы нацелены на другие варианты использования
  • По существу, просто дурачиться с basi c RegEx knowlege

Update

Чтобы прояснить вопрос: я не хочу делать это в JavaScript. Я знаю, что могу go к консоли и запустить что-то вроде copy(JSON.stringify(<the-json>)).

Я хочу быстро сделать это в редакторе, в этом случае Webstorm с помощью Заменить Инструмент - без установки каких-либо плагинов или инструментов переключения.

enter image description here


Окончательное решение

Для выполнения необходимых шагов: 1. Заменить \n пустой строкой. Это удаляет разрывы строк 1. Замените \s+" на " для удаления пробелов.

Спасибо @ Mhmdrz_A

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Вам нужно сделать два шага, чтобы добиться этого в webstrom:

сначала замените \n на (ничего!), Чтобы удалить разрывы строк;

, затем \s{2}" на " удалить два пробела перед каждым ключом;

0 голосов
/ 05 марта 2020

То, как объект отображается в JS, не связано с тем, как вы можете с ним обращаться;

{\n
  "keyOne": "First Value",\n
  "keyTwo": "Second Value"\n
}

здесь показаны символы \n, чтобы сделать его более читабельным для человека, они не на самом деле не существует в самом объекте;

const data = {
  "keyOne": "First Value",
  "keyTwo": "Second Value"
};
console.log(JSON.stringify(data))

, таким образом, вы не можете применить регулярное выражение к обычному JavaScript объекту;

однако (очень маловероятно), если у вас есть строковое представление объекта (откуда-то?) вы можете применить регулярное выражение для достижения желаемого результата, как показано в фрагменте ниже:

const strObj = `{
"keyOne": "First Value",
"keyTwo": "Second Value"
}`;

//since it is string we can't access it like normal js objects
console.log(strObj["keyOne"]);
console.log(typeof strObj, strObj);

//replacing the new line with nothing to make it linear
let result = strObj.replace(/\n/g,"")
console.log(typeof result, result);

//casting result to a valid json to an actual js object
let castedResult = JSON.parse(result);
// it will be shown as human readable since its normal object :)
console.log(typeof castedResult,castedResult);

//accessing one its attributes since its normal object now
console.log(castedResult.keyOne);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...