Какие символы действительны/недействительны в имени ключа JSON?

Существуют ли какие-либо запрещенные символы в именах ключей, для объектов JavaScript или строк JSON? Или символы, которые должны быть экранированы?

Чтобы быть более конкретным, я хотел бы использовать "$", "-" и пробел в именах ключей.

Ответ 1

Нет. Любая действительная строка является допустимым ключом. Он может даже иметь ", пока вы его избегаете:

{"The \"meaning\" of life":42}

Возможно, вы столкнетесь с трудностями при загрузке таких значений на некоторые языки, которые пытаются связать ключи с именами полей объектов. Однако я не знаю таких случаев.

Ответ 3

Следует отметить, что при запуске ключей с номерами допустимо, это может вызвать некоторые непредвиденные проблемы.

IE:

var testObject = { "1tile": "test value" }; console.log(testObject.1tile); // fails, invalid syntax console.log(testObject["1tile"]; // workaround

Ответ 4

Следует избегать кодовых точек Unicode U + D800 до U + DFFF: они недействительны в Юникоде, потому что они зарезервированы для суррогатных пар UTF-16, Некоторые кодеры/декодеры JSON заменят их U + FFFD. См., Например, как с ними связано язык Go и его библиотека JSON.

Поэтому избегайте "\ uD800" до "\ uDFFF" в одиночку (не в суррогатных парах).