在不知道键名的情况下访问 JSON 对象的元素

IT技术 javascript asp.net json vb.net for-loop
2021-03-21 04:08:52

这是我的json:

{"d":{"key1":"value1",
      "key2":"value2"}}

有没有办法在不知道键是什么的情况下访问这个数组中的键和值(在javascript中)?

我的 json 结构像这样的原因是我通过 jquery 调用的 webmethod 正在返回一个字典。如果无法使用上述方法,我需要更改返回数据的方式吗?

这是我的网络方法的概述:

<WebMethod()> _
Public Function Foo(ByVal Input As String) As Dictionary(Of String, String)
    Dim Results As New Dictionary(Of String, String)

    'code that does stuff

    Results.Add(key,value)
    Return Results
End Function
5个回答

您可以使用该for..in构造来遍历对象的任意属性:

for (var key in obj.d) {
    console.log("Key: " + key);
    console.log("Value: " + obj.d[key]);
}
@Radu 您无法使用索引访问对象的属性,因此您需要使用 for...in 获取键。
2021-04-21 04:08:52
这为我节省了超过 6 个小时的搜索时间。与火力树中的深儿童一起使用效果很好。
2021-04-23 04:08:52
您可能需要使用obj.d.hasOwnProperty(key)inside for 块来摆脱内部私有属性。
2021-05-10 04:08:52
完美的。for in如果只有一个键值对,我还需要使用 a吗?
2021-05-13 04:08:52
如果 JSON 有一个对象列表并且您想要获取对象名称怎么办?像 {"d":{"key1":"value1","key2":"value2"},"e":{"key1":"value1","key2":"value2"}} 和你想要的名字d 和 e,但您不知道它们在运行时被称为 d 和 e。
2021-05-19 04:08:52

这是你要找的吗?

var data;
for (var key in data) {
   var value = data[key];
   alert(key + ", " + value);
}
提示 2:一种更简洁的方式来提醒多个值: alert([key, value])
2021-04-30 04:08:52
@Radu 不客气,没问题。很高兴我们能够帮助您。
2021-05-03 04:08:52
@Ates Goral 我对 var 名称的暗示是它包含 JSON 数据,而不是它是一个 JSON 对象。糟糕的选择,我想。
2021-05-05 04:08:52
谢谢。接受另一个答案,因为它稍微更好地调整到我的 json 数据。
2021-05-09 04:08:52
提示:不要将 JavaScript 对象称为 JSON 对象。JSON 是传输格式。一旦解析,就没有 JSON。
2021-05-10 04:08:52
{
  "d":{
     "key1":"value1",
     "key2":"value2"
    }
}

要访问第一个密钥写入:

   let firstKey=Object.keys(d)[0];

要访问第一个键写入的值:

let firstValue= d[firstKey];

通过使用单词“b”,您仍在使用密钥名称。

var info = {
"fname": "Bhaumik",
"lname": "Mehta",
"Age": "34",
"favcolor": {"color1":"Gray", "color2":"Black", "color3":"Blue"}
};

看看下面的片段。

for(key in info) {
  var infoJSON = info[key];
  console.log(infoJSON);
}

结果是,

Bhaumik
Mehta
Object {color1: "Gray", color2: "Black", color3: "Blue"} 

不想显示最后一行?尝试以下代码:

for(key in info) {
  var infoJSON = info[key];
    if(typeof infoJSON !== "object"){
       console.log(infoJSON);
  }
}

这将消除Object {color1: “Gray”, color2: “Black”, color3: “Blue”}在控制台中的显示。

现在我们需要遍历变量 infoJSON 来获取数组值。看下面的全和平代码。

for(key in info) {
    var infoJSON = info[key];
    if (typeof infoJSON !== "object"){
       console.log(infoJSON);
    }
 }

for(key1 in infoJSON) {
    if (infoJSON.hasOwnProperty(key1)) {
       if(infoJSON[key1] instanceof Array) {
          for(var i=0;i<infoJSON[key1].length;i++) {
             console.log(infoJSON[key1][i]);
          }
        } else {console.log(infoJSON[key1]);}
    }
 }

现在我们得到了结果

Bhaumik
Mehta
Gray
Black
Blue

如果我们使用键名或 id,那么很容易从 JSON 对象中获取值,但这里我们不使用键名或 id 来获取我们的值。

使用 for 循环来实现相同的效果。

var dlist = { country: [ 'ENGLAND' ], name: [ 'CROSBY' ] }

for(var key in dlist){
     var keyjson = dlist[key];
     console.log(keyjson)
   }