У меня есть следующий JSON, который я получаю обратно из своей базы данных и пытаюсь получить доступ к ключам «имя» и «контакт»:

[
  {
    "key": {
      "name": "a",
      "kind": "Users",
      "path": [
        "Users",
        "a"
      ]
    },
    "data": {
      "fullname": "a",
      "password": "a",
      "contacts": [
        "bob", "john"
      ]
    }
  },
  {
    "key": {
      "name": "b",
      "kind": "Users",
      "path": [
        "Users",
        "b"
      ]
    },
    "data": {
      "fullname": "b",
      "password": "b",
      "contacts": [
        "john"
      ]
    }
  }
]

Моя функция обратного вызова javascript выглядит примерно так, и внутри я пытаюсь напечатать значения из переменной entity:

dataset.get(keys, function(err, entities) {});

Я попытался: entities.key.name[0], чтобы получить первое имя ключа, но это не работает. Я также застрял, как тогда получить переменную контактов.

0
user2924127 16 Дек 2015 в 09:59

5 ответов

Лучший ответ

Вы можете попробовать что-то вроде этого:

var json = [{
  "key": {
    "name": "a",
    "kind": "Users",
    "path": [
      "Users",
      "a"
    ]
  },
  "data": {
    "fullname": "a",
    "password": "a",
    "contacts": [
      "bob", "john"
    ]
  }
}, {
  "key": {
    "name": "b",
    "kind": "Users",
    "path": [
      "Users",
      "b"
    ]
  },
  "data": {
    "fullname": "b",
    "password": "b",
    "contacts": [
      "john"
    ]
  }
}]

function getJSONValues(){
  var names = [], contacts = [];
  for (var obj in json){
    console.log(json[obj]);
    
    names.push(json[obj].key.name);
    contacts.push(json[obj].data.contacts.splice(0));
  }
  
  console.log(names, contacts)
}

getJSONValues();
1
Rajesh 16 Дек 2015 в 07:05

Использовать entities[ 0 ][ "key" ].name; в качестве сущностей является array

1
void 16 Дек 2015 в 07:02

У вас есть массив. Таким образом, вы должны использовать индекс, чтобы прочитать элемент из него.

entities[0]

Возвращает первый объект.

{
"key": {
  "name": "a",
  "kind": "Users",
  "path": [
    "Users",
    "a"
  ]
},
"data": {
  "fullname": "a",
  "password": "a",
  "contacts": [
    "bob", "john"
  ]
}
}

Вы можете использовать либо точечную нотацию, либо нотацию в скобках, чтобы прочитать значения вашего объекта. Например, если вы хотите прочитать ключ, просто попробуйте это:

entities[0].key

Теперь key имеет ссылку на следующий объект:

{
  "name": "a",
  "kind": "Users",
  "path": [
    "Users",
    "a"
  ]
}

Итак, если вы хотите получить name, просто сделайте еще один шаг:

entities[0].key.name

То же самое верно для contacts:

entities[0].data.contacts
1
Christos 16 Дек 2015 в 07:02

Если переменная, которой назначен этот объект JSON, это entities

Тогда

entities[ 0 ][ "key" ].name; //will give you name
entities[ 0 ][ "data" ].contacts; //will give you contacts

Теперь вы можете перебрать entities как

entities[ counter ][ "key" ].name; //will give you name
entities[ counter ][ "data" ].contacts; //will give you contacts
1
gurvinder372 16 Дек 2015 в 07:01

Используйте консоль, чтобы увидеть что к чему:

var entities = [
  {
    "key": {
      "name": "a",
      "kind": "Users",
      "path": [
        "Users",
        "a"
      ]
    },
    "data": {
      "fullname": "a",
      "password": "a",
      "contacts": [
        "bob", "john"
      ]
    }
  },
  {
    "key": {
      "name": "b",
      "kind": "Users",
      "path": [
        "Users",
        "b"
      ]
    },
    "data": {
      "fullname": "b",
      "password": "b",
      "contacts": [
        "john"
      ]
    }
  }
];
console.log(entities);
console.log(entities[1].key.name);
console.log(entities[1].data.contacts[0]);
1
mplungjan 16 Дек 2015 в 07:01