Скажем, я получаю строку JSON, содержащую информацию о людях. Теперь я просматриваю все объекты JSON и извлекаю имя и возраст или каждый человек.
Как я могу хранить их как кортежи в списке для дальнейшей обработки? (Например, другой функцией)
Скажем, я получаю строку JSON, содержащую информацию о людях. Теперь я просматриваю все объекты JSON и извлекаю имя и возраст или каждый человек.
Как я могу хранить их как кортежи в списке для дальнейшей обработки? (Например, другой функцией)
Предполагая, что входящий JSON выглядит примерно так:
var incomingList = [{
"name": "Homer Simpson",
"age": 45,
"occupation": "Nuclear Plant Technician",
...
},{
"name": "Marge Simpson",
"age": 44,
"occupation": "Homemaker",
...
},
...
]
Вы можете извлечь имя и возраст только в аналогичный массив объектов:
var nameAndAgeList = incomingList.map(function(item) {
return {
name: item.name,
age: item.age
};
});
JavaScript имеет только объекты и массивы, а не кортежи. Если ваши данные ассоциативны (каждая запись имеет пары ключ-значение с именем поля в качестве ключа), то вышеуказанный подход будет работать нормально.
Однако, если вам нужно связать имена и возрасты в одном объекте в виде пар ключ-значение (например, ассоциативный массив) с именами как ключами и возрастами как значения, будет работать следующее (при условии, что имена уникальны)
var namesAndAges = incomingList.reduce(function(result,item) {
result[item.name] = item.age;
return result;
},{});
Что бы вы не перекодировали строку JSON в объект. JSON поддерживается в javascript, в конце концов, это * J * ava * S * cript * O * bject * N * otation.
Предположим, что у вас есть строка json -
"[{name:john,place:usa,phone:12345},{name:jim,place:canada,phone:54321}]"
Вы можете преобразовать в объект js с помощью
var persons = JSON.parse("[{name:john,place:usa,phone:12345},{name:jim,place:canada,phone:54321}]");
Теперь вы можете получить доступ к нему следующим образом: зацикливание всех кортежей/записей -
for (var i=0;i<persons.length;i++) {
var person = persons[i];
var name = person.name;
var place = person.place;
var phone = person.phone;
}
На основе ответа Викрама, поскольку вы специально запросили кортежи, следующее возвращает массив массивов - другими словами, список кортежей.
var parsed = JSON.parse('[{"name":"john", "place":"usa", "phone":"12345"},{"name":"jim", "place":"canada", "phone":"54321"}]');
var people = [];
for (var i=0; i < parsed.length; i++) {
var person = [parsed[i].name, parsed[i].place, parsed[i].phone];
people.push(person);
}
JS не имеет типа "кортежа". (см. Назначения переменных JavaScript из кортежей)
Вы можете либо создать свой собственный кортеж-класс, либо просто использовать массив длиной 2 (поэтому вы получите массив массивов длиной 2)
Если по кортежу вы имеете в виду что-то вроде упорядоченной пары, вы можете иметь объект с именем атрибута как "имя" человека и значение как "возраст" человека.
Вот так:
var tupleObj = {};
for (var i in jsonObj) {
tupleObj[jsonObj[i].name] = jsonObj[i].age;
}