使用JavaScript解析JSON对象以获取键和值。

3
我有一个对象,需要解析以下数据。
  var data= [{"obj1":"2122"},{"obj2":"123"}]

为了在JavaScript中获取键和值,我尝试使用以下代码:
var obj = JSON.parse(data);
for(var prop in data) {
if(data.hasOwnProperty(prop))
  console.log(prop);
}

在控制台中获取的值为:
Object {obj1: "2122"}
Object {obj2: "123"}

但我需要单独访问这些值而不是以对象的方式。如何从该对象中检索它?


展示给我们预期的输出结果! - Rayon
展示期望的方法和输出结果,如果你想通过关键字进行解析,可以在搜索对象之前使用loadash。 - masadi zainul
尝试使用下划线函数,参考 http://underscorejs.org/#pluck - Ayubxon Ubaydullayev
该帖子声称有一个[JavaScript] 对象。JSON.parse需要JSON文本。一个有用的开始是省略不正确的JSON.parse用法 - 编辑帖子以删除不正确的信息。 - user2864740
你确定数组中的对象应该有不同的键吗?如果这些值是相同类型的,你应该使用相同的键名,这样会更简单。 - T J
为什么我们要在这里解析,这已经是一个完美有效的对象了,对吧? - nisar
6个回答

5

JSON.parse用于将JSON字符串解析为JavaScript对象。

您不能直接在JavaScript对象上使用它...

无论如何,您的对象是一个数组,因此可以这样做:

var arr = JSON.parse(data);
arr.forEach(function(elementObject){
    var keys = Object.keys(elementObject);
    keys.forEach(function(key){
      console.log(key + ":"+elementObject[key]);
    })
});

干杯


1
"String to JSON" - 不是用于将 JavaScript 对象转换为 JSON 字符串,而是将符合 JavaScript 对象表示法的 JSON 字符串转换为 JavaScript 对象。JavaScript 对象 != JSON。 - T J
@Rajeshwar 不用谢,请将问题标记为已解决,T J 你说得对! - mimiz

1
在这里,你将会得到数组"values"中的值。

var data= [{"obj1":"2122"},{"obj2":"123"}]
 
data = JSON.stringify(data);
 
var values = [];
 
JSON.parse(data, function (key, value) {

    if (typeof(value) != "object") {
        values.push({[key]:value});
 // values.push(value); //if you need a value array
    }  
});


0
使用 Array#map 并在 callback 中提取对象的 keys。 通过 Array#forEach 迭代它们以获得每个键的 value

var data = [{
  "obj1": "2122"
}, {
  "obj2": "123"
}];
var op = data.map(function(item) {
  var keys = Object.keys(item);
  var arr = [];
  keys.forEach(function(key) {
    arr.push(item[key]);
  });
  return arr;
});
console.log(op);
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>


0
尝试使用$.each函数解析对象的代码。

 var data= [{"obj1":"2122"},{"obj2":"123"}]
 $.each(data, function(key, val) {
   $.each(val, function(k, v) {
   console.log('key ='+k);
   console.log('value ='+v);
   alert('key = '+k+', value = '+v);
  });
 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


0


试试这个..

var obj = JSON.parse('[{"obj1":2122},{"obj2":123}]');
obj.forEach(function(ElementObject){
var keys=Object.keys(ElementObject);
 console.log(keys[0],ElementObject[Object.keys(ElementObject)]); 
}
);

JsFiddle

{{链接1:JsFiddle}}


-1

首先:

var data = [{"obj1":"2122"},{"obj2":"123"}]

这行代码将创建一个数组。不需要:

var obj = JSON.parse(data);

如果您想通过键/值访问数据,您需要重新构建您的数据结构。

var data = [{key:"obj1",value:"2122"},{key:"obj2", value:"123"}];
for( var index in data)
{ 
  var item = data[index]; 
  console.log(item.key);
  console.log(item.value);

}

或者你可以进行映射:

 var keys = [{
  "obj1": "2122"
}, {
  "obj2": "123"
}];
var op = data.map(function(item) {
  var keys = Object.keys(item);
  var arr = [];
  keys.forEach(function(key) {
    console.log(key);
    arr.push(key);
  });
  return arr;
});
var i=0;
for(var i=0;i<op.length;i++)
{
  console.log(i);
  var pair=data[i];
  console.log(pair);
  var key=op[i][0];
  console.log(key);
  var value=pair[key];
  console.log(value);
}

编辑:更新以回答问题,而不更改数据结构。 - Alexander Higgins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接