Получите доступ к JSON, используя ключ 0/1 вместо имени ключа

0

У меня есть json, который выглядит примерно так:

{
    "TaskCategoryType": [
        {
            "PK_Column_Value": "C",
            "Column_Description": "Consumables"
        },
        //...
    }

Мне нужно получить значение "PK_Column_Value", не зная имя ключа.

Проникновение и получение записи в порядке, но я не хочу:

row.PK_Column_Value

в моем Javascript, так как во время выполнения я не знаю имя "PK_Column_Value", только то, что он первый в столбце "пара" для каждой строки json.

Я попытался: row [0], но он возвращает undefined.

Я хочу загрузить раскрывающийся список выбора со значением "PK_Column_Value" и текст "Описание", но я хочу отправить через другие json-данные, которые имеют другое имя столбца для значения в JSON.

  • 1
    В JavaScript ключи Object не имеют порядка, то есть вы не можете гарантировать, что вместо этого вы не получите Column_Description
  • 0
    Я знаю, меня не волнует порядок, я хочу загрузить данные из столбца 1 в значение = "" для выбора, а столбец 2 должен перейти в "<option> here </ option>. Но я не знать, что содержит JSON, только то, что первый столбец является значением, а 2-й является описанием
Показать ещё 8 комментариев
Теги:

3 ответа

0
Лучший ответ

Предполагая, что ваш объект имеет только два ключа, и вы знаете другой ключ;

var o = {
    "PK_Column_Value": "C",
    "Column_Description": "Consumables"
};
  1. получить ключи

    var keys = [], k;
    for (k in o) keys.push(k);
    
  2. Найти Column_Description

    i = keys.indexOf('Column_Description');
    
  3. получить другой ключ

    k = keys[1 - i];
    

Теперь

k === 'PK_Column_Value';

Это решает тот факт, что вы не можете гарантировать заказ ключа

  • 0
    Суть этого вопроса в том, что имя поля неизвестно: I need to retrieve the value of "PK_Column_Value" without knowing the name of the key. Независимо от того, запрашиваете ли вы поле непосредственно у объекта JSON или используете строку для поиска индекса ключа; оба требуют, чтобы вы знали ключ.
  • 0
    @Flater здесь я предполагаю, что он знает, что есть ключ Column_Description но не имя другого ключа
Показать ещё 7 комментариев
2

Лучшее, что вы можете сделать, это цикл и проверка, разные браузеры могут создавать разные порядки объектов:

for (var i = 0; i < data.TaskCategoryType.length; i++) {
    for (var key in data.TaskCategoryType[i]) {
        console.log(data.TaskCategoryType[i][key]) //Your keys
    }
}
  • 0
    Проблема с этим кодом заключается в том, что я не могу получить описание в той же строке, поэтому я не могу сделать $ (box) .append ($ ("<option> </ option>"). Attr ( "значение", строка [0]) текст (строка [1])).
  • 0
    @ user3036342 - Вы правы, потому что объект не может быть доступен через индекс, лучшее, что вы можете сделать, это зациклить, получить имя свойства, а затем назначить через имя свойства, которое вы только что получили.
Показать ещё 3 комментария
1

Единственным "чистым" способом было бы реструктурировать ваш JSON, чтобы содержать массивы вместо объектов.

{
"TaskCategoryType": [
    [
        "C",
        "Consumables"
    ],
    //...
}

Но лично я бы сохранил его таким образом, что делает код намного легче читать и поддерживать.

  • 0
    Я использую инфраструктуру MVC от MS, чтобы сгенерировать это из моделей, поэтому, даже если я приму ваш совет (этот вариант я рассмотрю в любом случае), я не уверен на 100%, как заставить модель возвращать json в твой формат :)
  • 0
    @ user3036342: убедитесь, что ваша модель имеет свойство string[] вместо двух отдельных полей с собственным именем. Это будет преобразовано в массив JSON.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню