Javascript 如何通过索引访问JSON对象中的字段

Javascript 如何通过索引访问JSON对象中的字段,javascript,json,Javascript,Json,我知道这不是最好的方法,但我别无选择:( 我必须通过索引访问JSONObject中的项。访问对象的标准方法是只需编写this[objectName]或this.objectName。我还找到了一种方法来获取json对象中的所有字段: (for (var key in p) { if (p.hasOwnProperty(key)) { alert(key + " -> " + p[key]); } } (索卢斯:) 但是,无法通过索引直接访问JSonfield。我

我知道这不是最好的方法,但我别无选择:(

我必须通过索引访问JSONObject中的项。访问对象的标准方法是只需编写
this[objectName]
this.objectName
。我还找到了一种方法来获取json对象中的所有字段:

(for (var key in p) { 
  if (p.hasOwnProperty(key)) { 
    alert(key + " -> " + p[key]); 
  } 
} 
(索卢斯:)

但是,无法通过索引直接访问JSonfield。我现在看到的唯一方法是创建一个数组,使用上面的函数,按索引获取fieldname,然后按fieldname获取值


在我看来,p(在我们的例子中,JSON文件必须是一个可迭代的数组,否则foreach循环将无法工作。我如何直接访问此数组?或者它是某种未排序的列表?

JSON对象更像是一个键值映射;因此,是的,它是未排序的。唯一的解决方法是您已经提到的索引->属性名称映射:

var keysbyindex = Object.keys(object);
for (var i=0; i<keysbyindex.length; i++)
    alert(object[keysbyindex[i]]);

?如果你有一个已解析的JSON对象,即普通JS对象,你就不必担心可枚举的原型属性。

我认为,如果不创建自己的JSON解析,你实际上无法实现这一点。你写的是你想通过一个JSON对象,但实际上你要做的是通过一个普通的旧JavascriptJson只是一个用于传输/存储所述对象的字符串表示,这里存在的主要问题是:将字符串转换为实际对象的解析器(大多数情况下是浏览器)如果愿意,可以选择忽略它查找属性的顺序。此外,不同的浏览器可能有不同的方法来解析JSON。如果它们只是对对象使用哈希映射,则循环遍历对象很简单,但顺序不取决于文件中键的顺序,而取决于键本身


例如,如果您使用json
{“b”:“b”,“a”:“a”}
并在循环中执行For,在某些实现中,您可能会首先使用comming,而在其他实现中,您可能会使用b.

基于Bergis anserwer,这是我的解决方案:

var keysbyindex = Object.keys(this);
alert(this[keysbyindex[index]]);        
return this[keysbyindex[index] || ""];
然而,我认为(未经测试)它的收视性能非常差,不应该使用!但在危急时刻需要采取危急措施….

var jsn={keyName:'key-value-result-come-here…};
var arr=jsn?$.map(jsn,函数(el){return el}):[0];
console.log(arr[0])
$('.result').text(arr[0]);


为什么必须通过索引访问项目?您所写的是如何遍历对象,这就是您所拥有的——将其更改为数组并不能提供相同的信息。嗨,我无法以任何其他方式获取数据,所以我以某种方式通过索引访问它们(其思想是将所有字段显示在一个表中作为一列)由于我们希望使用与其他对象相同的格式(我们通过字段名访问它们),因此我必须找到一种通过索引指定访问数据的方法:(.如前所述,我首先创建了一个字段名数组,然后通过索引访问它们,但我想去掉这个索引部分:为什么在迭代之前不只是有一个变量索引,然后使用它在for循环之前有一个顺序?比如
var I
,其中I=I+1?是的,这是真的。但我从未见过实现循环中的for不是按符号顺序的,你知道不同的吗?
var keysbyindex = Object.keys(this);
alert(this[keysbyindex[index]]);        
return this[keysbyindex[index] || ""];