Ответ 1
data.replace(/(['"])?([a-zA-Z0-9]+)(['"])?:/g, '"$2":');
Это заменит любые одинарные кавычки на имя параметра и добавит отсутствующие.
json2.js строго требует, чтобы все ключи объектов были двойными. Однако в синтаксисе Javascript {"foo":"bar"}
эквивалентно {foo:"bar"}
.
У меня есть текстовое поле, которое принимает вход JSON от пользователя и хочет "облегчить" ограничение при двойном цитировании ключей. Я посмотрел, как json2.js проверяет строку JSON в четыре этапа, прежде чем она ее оценит. Я смог добавить пятый этап, чтобы разрешить неупорядоченные ключи и хотел бы знать, есть ли какие-либо последствия для безопасности для этой логики.
var data = '{name:"hello", age:"23"}';
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, ":") // EDITED: allow key:[array] by replacing with safe char ":"
/** everything up to this point is json2.js **/
/** this is the 5th stage where it accepts unquoted keys **/
.replace(/\w+\s*\:/g, ":")) ) { // EDITED: allow any alphanumeric key
console.log( (new Function("return " + data))() );
}
else {
throw( "Invalid JSON: " + data );
}
data.replace(/(['"])?([a-zA-Z0-9]+)(['"])?:/g, '"$2":');
Это заменит любые одинарные кавычки на имя параметра и добавит отсутствующие.
Я подумал, что было бы полезно иметь фактические тестовые примеры для устранения любых проблем с этой реализацией. Я добавил проект github под названием JSOL с некоторыми тестами. Пожалуйста, заполните бесплатно, чтобы добавить к нему и найти проблемы. Спасибо.
JSON не разрешает использование некотируемых ключей. JSON является подмножеством нотации JavaScript и не включает в себя некотируемые ключи. Передача некотируемых ключей практически любому парсеру JSON, скорее всего, вызовет ошибку или вернет "неожиданные" результаты.
Надеюсь, что это поможет