#javascript #json
#javascript #json
Вопрос:
Я нахожусь в приложении Dojo, есть ли какой-либо специальный анализатор JS, который позволяет мне использовать значения по умолчанию в данных JSON?
Например, я хотел бы установить «maxHeadingLength» в элементе [1] на значение в элементе [0].
{
items:[
{
"class": "pmedia.types.PMPlatformRenderConfiguration",
"listItemHeight": "70",
"listItemIconHeight": "60",
"maxDesktopItemsWithBannerP": "9",
"maxDesktopItemsWithBannerL": "9",
"platform": "Default",
"maxHeadingLength":
{
P:300,
L:400
}
},
{
"class": "pmedia.types.PMPlatformRenderConfiguration",
"listItemHeight": "70",
"listItemIconHeight": "60",
"platform": "IPAD",
"maxHeadingLength": "Default"
},
Что-то подобное тоже было бы неплохо :
«maxHeadingLength»: «this.items[0].maxHeadingLength»
Спасибо
Обновление, кажется, теперь я могу и должен немного уточнить вопрос.
Я хотел бы записать любое строковое выражение в чистые строковые данные JSON (файл), разумеется, в виде строки, и оценить данные в том же наборе данных без использования «eval». Спасибо всем!
Комментарии:
1. Вы говорите о JSON, который по-прежнему является строкой, или результирующим объектом после синтаксического анализа JSON, или литералом объекта в вашем JavaScript?
2. да, эти данные должны быть первыми в файле и загружаться с помощью dojo’s xhr с локального файлового или удаленного сервера. Я хотел бы передать эти данные через параметр url в конечном итоге позже, чтобы переопределить некоторые настройки. Спасибо.
Ответ №1:
Вы можете либо сделать это во внутреннем процессе, либо использовать внешний процесс при обработке JSON.
Давайте предположим, что вы хотите сделать это во внешнем интерфейсе, используя JS, я бы предложил сначала установить items[0].maxHeadingLength
в качестве переменной, вот так:
var defaultMaxHeadingLength = items[0].maxHeadingLength;
И затем, когда вы просматриваете свой JSON, вы можете проверить, имеет ли maxHeadingLength
атрибут значение или нет, и установить его по умолчанию, вот так:
var item, i;
for ( i = 0; i < items.length; i )
{
item = items[ i ];
item.maxHeadingLength = item.maxHeadingLength ? item.maxHeadingLength : defaultMaxHeadingLength;
}
Комментарии:
1. Этот способ требует довольно больших затрат. Я ожидаю много значений по умолчанию во вложенных структурах, поэтому в идеале я хотел бы определить в значении элемента вот так: maxHeadingLength=»Платформа: по умолчанию». Похоже, мне нужно написать собственный маленький анализатор, который позволяет мне выполнять операции чтения / записи из самостоятельно определенного синтаксиса. Я просто надеялся, что есть что-то готовое, например, XML-схемы. Спасибо.
Ответ №2:
Вот идея одного из способов сделать это (если я понимаю, что вы пытаетесь сделать):
var defaultItem = {
"maxHeadingLength": {
P: 300,
L: 400
}
};
var jsondata = {
items: [
{
"class": "pmedia.types.PMPlatformRenderConfiguration",
"listItemHeight": "70",
"listItemIconHeight": "60",
"platform": "IPAD",
"maxHeadingLength": this.defaultItem.maxHeadingLength
}
]
};
alert(jsondata.items[0].maxHeadingLength.L);
//returns 400
По сути, у вас есть элемент по умолчанию, отдельный от всех ваших других элементов, позволяющий вам ссылаться на значения по умолчанию в основных данных.
Я не думаю, что вы можете использовать this.jsondata из того же объекта, поскольку его создание еще не завершено (но я могу ошибаться).
Комментарии:
1. как объяснялось в первом ответе, значения по умолчанию хранятся в файле. Мне нужен своего рода анализатор, который выполняет поиск в том же файле и заменяет значение из указанного элемента. Спасибо