Установка значений в JSON для элементов JSON по умолчанию

#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. как объяснялось в первом ответе, значения по умолчанию хранятся в файле. Мне нужен своего рода анализатор, который выполняет поиск в том же файле и заменяет значение из указанного элемента. Спасибо