Это простое решение для регулярных выражений в большинстве случаев позволяет убрать кавычки с имен свойств JSON:
const object = { name: 'John Smith' };
const json = JSON.stringify(object);
console.log(json);
const unquoted = json.replace(/"([^"]+)":/g, '$1:');
console.log(unquoted);
Крайний случай:
var json = '{ "name": "J\\":ohn Smith" }'
json.replace(/\\"/g,"\uFFFF");
json = json.replace(/"([^"]+)":/g, '$1:').replace(/\uFFFF/g, '\\\"');
Особая благодарность Робу В. за его исправление.
Ограничения
В обычных случаях вышеупомянутое регулярное выражение будет работать, но математически невозможно описать формат JSON с помощью регулярного выражения, чтобы он работал в каждом отдельном случае (подсчет того же количества фигурных скобок невозможен с регулярным выражением). Поэтому у меня есть создайте новую функцию для удаления кавычек, формально проанализировав строку JSON с помощью собственной функции и повторно сериализуя ее:
function stringify(obj_from_json) {
if (typeof obj_from_json !== "object" || Array.isArray(obj_from_json)){
return JSON.stringify(obj_from_json);
}
let props = Object
.keys(obj_from_json)
.map(key => `${key}:${stringify(obj_from_json[key])}`)
.join(",");
return `{${props}}`;
}
Пример: https://jsfiddle.net/DerekL/mssybp3k/
{"foo":"e\":bar"}
(действительный JSON) становится{foo:e:bar"}
(...)!/\\\"/
можно упростить до/\\"/
. Не забудьте добавить глобальный флаг/\\"/g
, иначе он будет разбит на несколько строк\"
. Что касается случайного символа, никогда не используйте буквальный U + FFFF, если редактор задыхается, а escape-последовательность. Регулярное выражение для возврата станет/\uFFFF/g
./\"([^(\")"]+)\":/g
можно упростить/"([^"]+)":/g
, см. Regex101.com/r/qnz0ld/2Похоже, это простой метод Object toString, который вы ищете.
В Node.js это решается с помощью объекта util и вызова util.inspect (yourObject). Это даст вам все, что вы хотите. перейдите по этой ссылке, чтобы узнать о дополнительных возможностях, включая глубину применения метода. http://nodejs.org/api/util.html#util_util_inspect_object_options
Итак, то, что вы ищете, - это инспектор объектов, а не конвертер JSON. Формат JSON указывает, что все свойства должны быть заключены в двойные кавычки. Следовательно, не будет конвертеров JSON, которые бы делали то, что вы хотите, поскольку это просто не формат JSON. Технические характеристики здесь: https://developer.mozilla.org/en-US/docs/Using_native_JSON
Возражение против строки или проверки - это то, что вам нужно, в зависимости от языка вашего сервера.
источник
.toSource()
отлично работает и в nodejs, но не работает с объектами в массивах.util
Инспектировать работы для массивов и объектов в массивах , которые замечательно, любят его.util.inspect()
просто отлично поработал для меня при написании объекта в запросе Neo4j, чтобы установить сразу несколько параметров.Вы можете посмотреть исходный код парсера, созданного тем, кто определил формат JSON . Ищите вызовы функций: они заключают значение в кавычки. Ключи указаны в строках 326 и 338 .
json2.js
quote
Не включайте библиотеку после модификации. Вместо этого возьмите только соответствующую
stringify
часть ( ) или, по крайней мере, заменитеJSON
чем-то другим, например.FAKEJSON
.Например, объект,
FAKEJSON
который определен толькоstringify
: http://jsfiddle.net/PYudw/источник
JSON.stringify
участие, а цитаты убрать. Поскольку библиотека создается тем, кто определил JSON , мы можем быть уверены, что результатом будет очень правильный JSON..toSource()
работает хорошо, но не включает, если ваш объект находится в массиве, который является обломом (и я нахожусь на узле, поэтому совместимость браузера не является проблемой: P), поэтому я также буду использовать этот метод, спасибо @RobW, ссылка jsfiddle кажется застрять на странице загрузки :(Попробуйте использовать сервив с JSONP, я думаю, они его предлагают при использовании этого формата.
Или отправьте им подробный отчет об ошибке, включая хорошую аргументацию, почему они должны соответствовать стандарту. Любое другое решение, кроме устранения проблемы с источником, не является реальным решением.
Быстрое и грязное исправление может заключаться в том, чтобы пропустить строку через регулярное выражение перед ее анализом:
var obj = JSON.parse(str.replace(/(\{|,)\s*(.+?)\s*:/g, '$1 "$2":'));
Или вы пытаетесь настроить существующий парсер javascript JSON (например, этот ), если хотите более синтаксический анализ.
источник
Нашел хороший пакет NPM для этого:
https://www.npmjs.com/package/stringify-object
const stringify = require('stringify-object') let prettyOutput = stringify(json);
Работает неплохо.
источник
Ваш унаследованный синтаксис должен быть легко съеден YAML, который является надмножеством JSON.
Попробуйте синтаксический анализатор и дампер JavaScript YAML: http://nodeca.github.com/js-yaml/
источник
@Derek 朕 會 功夫 Спасибо за то, что поделились этим методом, я хочу поделиться своим кодом, который также поддерживает строковое преобразование массива объектов.
export const stringifyObjectWithNoQuotesOnKeys = (obj_from_json) => { // In case of an array we'll stringify all objects. if (Array.isArray(obj_from_json)) { return `[${ obj_from_json .map(obj => `${stringifyObjectWithNoQuotesOnKeys(obj)}`) .join(",") }]` ; } // not an object, stringify using native function if(typeof obj_from_json !== "object" || obj_from_json instanceof Date || obj_from_json === null){ return JSON.stringify(obj_from_json); } // Implements recursive object serialization according to JSON spec // but without quotes around the keys. return `{${ Object .keys(obj_from_json) .map(key => `${key}:${stringifyObjectWithNoQuotesOnKeys(obj_from_json[key])}`) .join(",") }}`; };
источник
JSON.stringify
instanceof Date. Также верните,'null'
если значениеobj_from_json
null.if(typeof obj_from_json !== "object" || obj_from_json instanceof Date || obj_from_json === null)
Использовать
JSON5.stringify
JSON5 является надстройкой JSON , который позволяет ES5 синтаксис, в том числе некотируемых ключей свойств. Эталонная реализация JSON5 (
json5
пакет npm ) предоставляетJSON5
объект, который имеет те же методы с теми же аргументами и семантикой, что и встроенныйJSON
объект.Весьма вероятно, что служба, которую вы используете, использует эту библиотеку.
источник
В CSVJSON JSON Beautifier есть возможность добавлять кавычки на ключи. Если вам нужен только код, вы можете скопировать его из репозитория GitHub. Я модифицировал JSON2 Дугласа Крокфорда, чтобы добавить его поддержку.
источник
hacked by AnoaGhost