У меня есть 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.
Предполагая, что ваш объект имеет только два ключа, и вы знаете другой ключ;
var o = {
"PK_Column_Value": "C",
"Column_Description": "Consumables"
};
получить ключи
var keys = [], k;
for (k in o) keys.push(k);
Найти Column_Description
i = keys.indexOf('Column_Description');
получить другой ключ
k = keys[1 - i];
Теперь
k === 'PK_Column_Value';
Это решает тот факт, что вы не можете гарантировать заказ ключа
I need to retrieve the value of "PK_Column_Value" without knowing the name of the key.
Независимо от того, запрашиваете ли вы поле непосредственно у объекта JSON или используете строку для поиска индекса ключа; оба требуют, чтобы вы знали ключ.
Column_Description
но не имя другого ключа
Лучшее, что вы можете сделать, это цикл и проверка, разные браузеры могут создавать разные порядки объектов:
for (var i = 0; i < data.TaskCategoryType.length; i++) {
for (var key in data.TaskCategoryType[i]) {
console.log(data.TaskCategoryType[i][key]) //Your keys
}
}
Единственным "чистым" способом было бы реструктурировать ваш JSON, чтобы содержать массивы вместо объектов.
{
"TaskCategoryType": [
[
"C",
"Consumables"
],
//...
}
Но лично я бы сохранил его таким образом, что делает код намного легче читать и поддерживать.
string[]
вместо двух отдельных полей с собственным именем. Это будет преобразовано в массив JSON.
Column_Description