如何获取JSON对象中的键值?

时间:2012-01-03 11:27:54

标签: javascript json

如何使用JavaScript获取JSON对象中的键值和对象的长度 例如:

[
  {
    "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 个答案:

答案 0 :(得分:18)

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]);
   }

答案 1 :(得分:15)

首先,你没有处理“JSON对象”。你正在处理一个JavaScript对象。 JSON是文本表示法,但如果您的示例代码有效([0].amount),则您已将该表示法反序列化为JavaScript对象图。 (你引用的内容根本不是有效的JSON;在JSON中,键必须是双引号。你引用的是JavaScript对象文字,它是JSON的超集。)

  

此处,此数组的长度为2。

不,这是3。

  

所以,我需要得到这个名字(比如金额或工作......总共四个名字),还要计算那里有多少名字?

如果您使用的是具有完整ECMAScript5支持的环境,则可以使用Object.keysspec | 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混淆的罪,但我们假设没有)。但是,如果您想要键的对象也可以从其原型继承可枚举属性,则可以通过添加{{}将循环限制为仅对象的自己的键(而不是其原型的键)。 1}}在那里打电话:

hasOwnProperty

答案 2 :(得分:11)

您可能需要:

Object.keys(JSON[0]);

获得类似的内容:

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

注意:您的JSON无效。

答案 3 :(得分:1)

尝试一下

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)

答案 4 :(得分:0)

当您parse the JSON representation时,它将成为对象的JavaScript array

因此,您可以使用JavaScript数组的.length property来查看包含的元素数量,并使用for循环来枚举它。

答案 5 :(得分:0)

您可以简单地遍历对象,如果找到匹配项,则返回此代码

returnKeyforValue : function(){
    var JsonObj= { "one":1, "two":2, "three":3, "four":4, "five":5 };
        for (key in JsonObj) {
        if(JsonObj[key] === "Keyvalue"){
           return key;
        }
    }
 }