Получить пару ключ / значение из вложенного объекта JSON ответа Firebase - PullRequest
0 голосов
/ 14 февраля 2019

Я получаю следующий ответ от вызова GET API к базе данных Firebase.Это вложенные объекты JSON.

Я хочу получить все значения для ключа name из каждого вложенного объекта в массив с использованием JavaScript

GET REST API Ответ:

{
  "barID1": {
    "address": "4 East Terrace, Sydney NSW 2000",
    "appStoreURL": "http://itunes.apple.com/app/idXXXXXXXXX",
    "description": “description text”,
    "imgURLs": [ "Https:url1”,  "https:url2”, "https:url3” ],
    "lat": -34.810585,
    "lon": 138.616739,
    "name": "Africola",
    "phone": "(08) 8223 3885",
    "status": "active",
    "venueImgURL": "https:url”
  },
  "barID2": {
    "address": "138/140 Gouger St, Sydney NSW 2000",
    "appStoreURL": "http://itunes.apple.com/app/idXXXXXXXXX",
     "description": “description text”,
    "imgURLs": [ "Https:url1”,  "https:url2”, "https:url3” ],
    "lat": -34.848082,
    "lon": 138.599813,
    "name": "Disco Mexico Taqueria",
    "phone": "0416 855 108",
    "status": "active",
    "venueImgURL": "https:url”
  }
}

Ответы [ 5 ]

0 голосов
/ 14 февраля 2019

Самое простое решение: Object.values:

const data = {"barID1":{"address":"4 East Terrace, Sydney NSW 2000","appStoreURL":"http://itunes.apple.com/app/idXXXXXXXXX","description":"description text","imgURLs":["Https:url1","https:url2","https:url3"],"lat":-34.810585,"lon":138.616739,"name":"Africola","phone":"(08) 8223 3885","status":"active","venueImgURL":"https:url"},"barID2":{"address":"138/140 Gouger St, Sydney NSW 2000","appStoreURL":"http://itunes.apple.com/app/idXXXXXXXXX","description":"description text","imgURLs":["Https:url1","https:url2","https:url3"],"lat":-34.848082,"lon":138.599813,"name":"Disco Mexico Taqueria","phone":"0416 855 108","status":"active","venueImgURL":"https:url"}};
const namesArr = Object.values(data).map(({ name }) => name);
console.log(namesArr);
0 голосов
/ 14 февраля 2019

Вы можете map () Object.values ​​() структуры json.

const json = {
  "barID1": {
    "address": "4 East Terrace, Sydney NSW 2000",
    "appStoreURL": "http://itunes.apple.com/app/idXXXXXXXXX",
    "description": "description text",
    "imgURLs": [ "Https:url1",  "https:url2", "https:url3" ],
    "lat": -34.810585,
    "lon": 138.616739,
    "name": "Africola",
    "phone": "(08) 8223 3885",
    "status": "active",
    "venueImgURL": "https:url"
  },
  "barID2": {
    "address": "138/140 Gouger St, Sydney NSW 2000",
    "appStoreURL": "http://itunes.apple.com/app/idXXXXXXXXX",
     "description": "description text",
    "imgURLs": [ "Https:url1",  "https:url2", "https:url3" ],
    "lat": -34.848082,
    "lon": 138.599813,
    "name": "Disco Mexico Taqueria",
    "phone": "0416 855 108",
    "status": "active",
    "venueImgURL": "https:url"
  }
};

let res = Object.values(json).map(({name}) => name);
console.log(res);
0 голосов
/ 14 февраля 2019

Здесь я использую for in, чтобы зациклить каждый объект в вашем JSON, а затем вставить имя в массив результатов.

const data = {
  "barID1": {
    "address": "4 East Terrace, Sydney NSW 2000",
    "appStoreURL": "http://itunes.apple.com/app/idXXXXXXXXX",
    "description": "description text",
    "imgURLs": ["Https:url1", "https: url2", "https:url3"],
    "lat": -34.810585,
    "lon": 138.616739,
    "name": "Africola",
    "phone": "(08) 8223 3885",
    "status": "active",
    "venueImgURL": "https:url"
  },
  "barID2": {
    "address": "138/140 Gouger St, Sydney NSW 2000",
    "appStoreURL": "http://itunes.apple.com/app/idXXXXXXXXX",
    "description": "description text",
    "imgURLs": ["Https:url1", "https: url2", "https:url3"],
    "lat": -34.848082,
    "lon": 138.599813,
    "name": "Disco Mexico Taqueria",
    "phone": "0416 855 108",
    "status": "active",
    "venueImgURL": "https:url"
  }
}

let result = []
for (let i in data) {
  result.push(data[i].name)
}
console.log(result)
0 голосов
/ 14 февраля 2019

Это можно сделать, используя:

  1. Используя Array.reduce для накопления name значений в одном массиве.

  2. Использование Object.keys и Array.map для перебора ключей и отображенияэто к массиву name.

  3. Использование Object.values и Array.map

  4. Использование Array.from и использование второго параметра функции отображения для отображения отдельных объектов в массив names.

const obj = {"barID1":{"address":"4 East Terrace, Sydney NSW 2000","appStoreURL":"http://itunes.apple.com/app/idXXXXXXXXX","description":"description text","imgURLs":["Https:url1","https:url2","https:url3"],"lat":-34.810585,"lon":138.616739,"name":"Africola","phone":"(08) 8223 3885","status":"active","venueImgURL":"https:url"},"barID2":{"address":"138/140 Gouger St, Sydney NSW 2000","appStoreURL":"http://itunes.apple.com/app/idXXXXXXXXX","description":"description text","imgURLs":["Https:url1","https:url2","https:url3"],"lat":-34.848082,"lon":138.599813,"name":"Disco Mexico Taqueria","phone":"0416 855 108","status":"active","venueImgURL":"https:url"}};

//using Object.values & reduce
let name = Object.values(obj).reduce((acc, ele) =>{
 return acc.concat(ele.name)
}, []);
console.log(name);

//using Object.keys & map 
name = Object.keys(obj).map((ele) => obj[ele]['name']);
console.log(name);

//using Object.values & map
name = Object.values(obj).map((ele) => ele.name);
console.log(name);

//using Array.from
name = Array.from(Object.values(obj), ele => ele.name);
console.log(name);
0 голосов
/ 14 февраля 2019

Вы можете извлечь значения входного объекта через Object.values(), а затем map() name из каждого значения object, как показано ниже, для достижения этого:

const data = {
    barID1: {
    address: "4 East Terrace, Sydney NSW 2000",
    appStoreURL: "http://itunes.apple.com/app/idXXXXXXXXX",
    description: "description text",
    imgURLs: [ "Https:url1",  "https:url2", "https:url3" ],
    lat: -34.810585,
    lon: 138.616739,
    name: "Africola",
    phone: "(08) 8223 3885",
    status: "active",
    venueImgURL: "https:url"
  },
    barID2: {
    address: "138/140 Gouger St, Sydney NSW 2000",
    appStoreURL: "http://itunes.apple.com/app/idXXXXXXXXX",
    description: "description text",
    imgURLs: [ "Https:url1",  "https:url2", "https:url3" ],
    lat: -34.848082,
    lon: 138.599813,
    name: "Disco Mexico Taqueria",
    phone: "0416 855 108",
    status: "active",
    venueImgURL: "https:url"
  }
}

console.log( Object.values(data).map(object => object.name) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...