Как получить значение ключа в объекте JSON? - PullRequest
20 голосов
/ 03 января 2012

Как получить значение ключа в объекте JSON и длину объекта с помощью JavaScript.
Например:

[
  {
    "amount": " 12185",
    "job": "GAPA",
    "month": "JANUARY",
    "year": "2010"
  },
  {
    "amount": "147421",
    "job": "GAPA",
    "month": "MAY",
    "year": "2010"
  },
  {
    "amount": "2347",
    "job": "GAPA",
    "month": "AUGUST",
    "year": "2010"
  }
]

Здесь длина этого массива равна 3. Для получения значения в порядке ([0].amount), в индексе [0] у него есть 3 пары имя-значение.
Итак, мне нужно получить имя (например, количество или задание. ... всего четыре имени) а также посчитать, сколько имен там?

Ответы [ 6 ]

18 голосов
/ 03 января 2012

Json в основном представлен как ассоциированный массив в Javascript.Просто нужно зациклить их, чтобы либо прочитать ключ или значение

    var JsonObj= { "one":1, "two":2, "three":3, "four":4, "five":5 };

    //read key
    for (var key in JsonObj) {
       console.log(key);
       console.log(JsonObj[key]);
   }
15 голосов
/ 03 января 2012

Во-первых, вы не имеете дело с "объектом JSON".Вы имеете дело с объектом JavaScript.JSON - это текстовая нотация, но если ваш пример кода работает ([0].amount), вы уже десериализовали эту нотацию в граф объектов JavaScript.(То, что вы цитировали, вообще не является допустимым JSON; в JSON ключи должны быть в двойных кавычках. То, что вы указали, - это литерал объекта JavaScript, который является надмножеством JSON.)

Здесь длина этого массива равна 2.

Нет, это 3.

Итак, мне нужно получить имя (например, количество или работа ... всего четыре имени), а также подсчитать, сколько там имен?

Если вы используете среду с полной поддержкой ECMAScript5, вы можете использовать Object.keys ( spec | MDN ), чтобы получить перечислимые ключи для одного из объектов в виде массива.Если нет (или если вы просто хотите просмотреть их, а не получить их массив), вы можете использовать for..in:

var entry;
var name;
entry = array[0];
for (name in entry) {
    // here, `name` will be "amount", "job", "month", then "year" (in no defined order)
}

Полный рабочий пример:

(function() {
  
  var array = [
    {
      amount: 12185,
      job: "GAPA",
      month: "JANUARY",
      year: "2010"
    },
    {
      amount: 147421,
      job: "GAPA",
      month: "MAY",
      year: "2010"
    },
    {
      amount: 2347,
      job: "GAPA",
      month: "AUGUST",
      year: "2010"
    }
  ];
  
  var entry;
  var name;
  var count;
  
  entry = array[0];
  
  display("Keys for entry 0:");
  count = 0;
  for (name in entry) {
    display(name);
    ++count;
  }
  display("Total enumerable keys: " + count);

  // === Basic utility functions
  
  function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = msg;
    document.body.appendChild(p);
  }
  
})();

Поскольку вы имеете дело с необработанными объектами, вышеприведенный цикл for..in работает нормально (если только кто-то не совершил грех надлома с Object.prototype, но давайте предположимне).Но если объект, от которого вы хотите получить ключи, может также наследовать перечисляемые свойства от своего прототипа, вы можете ограничить цикл только ключами собственных объекта (а не ключами его прототипа), добавив hasOwnPropertyпозвоните туда:

for (name in entry) {
  if (entry.hasOwnProperty(name)) {
    display(name);
    ++count;
  }
}
11 голосов
/ 03 января 2012

Вам может понадобиться:

Object.keys(JSON[0]);

Чтобы получить что-то вроде:

[ 'amount', 'job', 'month', 'year' ]

Примечание. Ваш JSON недействителен.

1 голос
/ 26 марта 2019

Попробуйте это

var str ="{ "name" : "user"}";
var jsonData = JSON.parse(str);     
console.log(jsonData.name)

//Array Object

str ="[{ "name" : "user"},{ "name" : "user2"}]";
jsonData = JSON.parse(str);     
console.log(jsonData[0].name)
0 голосов
/ 24 июля 2018

Вы можете просто пройти через объект и вернуться, если найдено совпадение, здесь есть код

returnKeyforValue : function(){
    var JsonObj= { "one":1, "two":2, "three":3, "four":4, "five":5 };
        for (key in JsonObj) {
        if(JsonObj[key] === "Keyvalue"){
           return key;
        }
    }
 }
0 голосов
/ 03 января 2012

Когда вы анализируете представление JSON , оно становится массивом JavaScript объектов.

Из-за этого вы можете использовать .length свойство массива JavaScript, чтобы увидеть, сколько элементов содержится, и использовать цикл for для его перечисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...