【问题标题】:Accessing elements of JSON object without knowing the key names在不知道键名的情况下访问 JSON 对象的元素
【发布时间】:2011-07-04 02:03:48
【问题描述】:

这是我的 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

【问题讨论】:

  • “访问此数组中的键和值(在 javascript 中)” - 什么数组..?

标签: javascript asp.net json vb.net for-loop


【解决方案1】:

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

for (var key in obj.d) {
    console.log("Key: " + key);
    console.log("Value: " + obj.d[key]);
}

【讨论】:

  • 完美。如果只有一个键值对,我还需要使用for in吗?
  • @Radu 您无法使用索引访问对象的属性,因此您需要使用 for...in 获取键。
  • 如果 JSON 中有一个对象列表并且您想获取对象名称怎么办?像 {"d":{"key1":"value1","key2":"value2"},"e":{"key1":"value1","key2":"value2"}} 你想要名字d 和 e,但你不知道它们在运行时被称为 d 和 e。
  • 您可能需要在内部使用obj.d.hasOwnProperty(key) for block 以摆脱内部私有属性。
  • 这为我节省了 6 个多小时的搜索时间。与火力树中的深层子级配合良好。
【解决方案2】:

这是你要找的吗?

var data;
for (var key in data) {
   var value = data[key];
   alert(key + ", " + value);
}

【讨论】:

  • 提示:不要将 JavaScript 对象称为 JSON 对象。 JSON 是传输格式。解析后,没有 JSON。
  • 提示2:一种更简洁的警告多个值的方法:alert([key, value])
  • @Ates Goral 我对 var 名称的暗示是它包含 JSON 数据,而不是 JSON 对象。我想这是个糟糕的选择。
  • 谢谢。接受了另一个答案,因为它对我的 json 数据进行了更好的调整。
  • @Radu 不客气,没问题。很高兴我们能为您提供帮助。
【解决方案3】:
{
  "d":{
     "key1":"value1",
     "key2":"value2"
    }
}

访问第一个键写入:

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

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

let firstValue= d[firstKey];

【讨论】:

    【解决方案4】:

    通过使用单词“b”,您仍在使用键名。

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

    看下面的sn-p。

    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 的情况下获取值。

    【讨论】:

      【解决方案5】:

      使用 for 循环来达到同样的效果。

      var dlist = { country: [ 'ENGLAND' ], name: [ 'CROSBY' ] }
      
      for(var key in dlist){
           var keyjson = dlist[key];
           console.log(keyjson)
         }

      【讨论】:

        猜你喜欢
        • 2017-06-16
        • 2016-07-02
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        • 1970-01-01
        • 1970-01-01
        • 2022-12-11
        相关资源
        最近更新 更多