在不知道键名的情况下访问 JSON 对象的元素
Posted
技术标签:
【中文标题】在不知道键名的情况下访问 JSON 对象的元素【英文标题】:Accessing elements of JSON object without knowing the key names 【发布时间】: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 中)” - 什么数组..? 【参考方案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)
【讨论】:
以上是关于在不知道键名的情况下访问 JSON 对象的元素的主要内容,如果未能解决你的问题,请参考以下文章