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

How to access fields in JSON object by index

本文关键字:字段 对象 JSON 何通过 索引 访问      更新时间:2023-09-26

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

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

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

(Soruce:循环通过Json对象)。

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

据我所见,p(在我们的例子中,JSON文件必须是到的可迭代数组,否则foreach循环将不起作用。我如何直接访问这个数组?或者它是某种未排序的列表?

JSON对象更像一个键值映射;所以,是的,它是未排序的。唯一的方法是你已经提到的索引->属性名称映射:
var keysbyindex = Object.keys(object);
for (var i=0; i<keysbyindex.length; i++)
    alert(object[keysbyindex[i]]);

但是你为什么需要这些索引呢?未排序的映射也没有像Array那样的长度属性。为什么不使用for in loop

var counter = 0; // if you need it
for (var key in object) {
    alert(object[key])
    counter++;
}

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

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

var keysbyindex = Object.keys(this);
alert(this[keysbyindex[index]]);        
return this[keysbyindex[index] || ""];

然而,我认为(未经测试)它的性能非常糟糕,不应该使用!但绝望的时刻需要采取绝望的措施。。。。。

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

例如,如果您有json {"b":"b","a":"a"}并在循环中执行For,在某些实现中,您可能会首先得到一个compmg,而在其他实现中,可能会得到b。

var jsn = {keyName: 'key value result come here...'};
var arr = jsn ? $.map(jsn, function (el) { return el }) : [0];
console.log(arr[0])
$('.result').text(arr[0]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="result"></span>