Я думаю, що правильною відповіддю на питання Чезо є те, що реалізація перевершила документацію. Для цього більше не потрібен рядок як ключ, а щось інше, яке може бути або рядком (тобто в лапках), або (можливо) будь-яким, що може використовуватися як ім'я змінної, що, на мою думку, означає, що починати з літери, _ , або $, і включають лише літери, цифри, а також $ і _.
Я хотів спростити решту для наступної людини, яка відвідує це питання з тією ж ідеєю, що і я. Ось м’ясо:
Імена змінних не інтерполюються в JSON, коли вони використовуються як ключ об’єкта (Дякую, Фрідо!)
Бретонський, використовуючи "ідентифікатор" замість "ключ", писав, що "якщо ідентифікатор виявляється зарезервованим словом, він інтерпретується як це слово, а не як ідентифікатор". Це може бути правдою, але я спробував це без особливих проблем:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
Про використання лапок Квентін пише: "... але вам не потрібно, якщо [ключ] не містить певних символів (або комбінацій символів, які роблять це ключовим словом)"
Я виявив, що колишня частина (певні символи) відповідає дійсності, використовуючи знак @ (насправді, я думаю, $ і _ - це єдині символи, які не спричиняють помилку):
var a = {a@b:1};
=> Синтаксична помилка
var a = {"a@b":1};
a['a@b']
=> 1
але дужка про ключові слова, як я показав вище, не відповідає дійсності.
Те, що я хотів, працює, тому що текст між початком {та двокрапкою, або між комою та двокрапкою для наступних властивостей використовується як рядок без котирувань для створення ключа об'єкта, або, як висловився Фрідо, ім'я змінної там немає ' t отримати інтерполяцію:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123