js中可以通过下标取到json对象的值么?

scu酱油仔
  • 1.3k
var jsonData={"key1":"value1","key2":"value2","key3":"value3"};

比如上述数据,我想取到第二个属性的值value2,不能通过key2,可以通过下标取到么?

回复
阅读 10.6k
8 个回答
✓ 已被采纳
// 对象没有顺序。如果只是需要key可以使用ES5的`Object.keys`返回对象的键组成的数组。
var jsonData={"key1":"value1","key2":"value2","key3":"value3"};
var result = Object.keys(jsonData);
console.log(result);
// ["key1", "key2", "key3"]

对象内部的属性,原则上没有规定顺序。

{} 是无序的,不能保证取的就是你想要的。
如果没有别的考虑,你可以换一种格式:
[{'k': 'key1', 'v': 'value1'},{'k': 'key1', 'v': 'value1'},{'k': 'key1', 'v': 'value1'}]
这样可以取第二个对象的v值

对象的属性是按照字典来排序的,没有第二个这种说法,你应该是使用数组这种数据结构

这个问题涉及到对象{}与数组[]的区别,数组是按顺序排列的,下标数组确定的,而对象是取键值,无序的,所以不同通过下标取值。
一:可以转换存储结构,使用数组存数据
二:通过排序算法固定键值对的位置
三:对键值进行标记

你可以看看前面他们说的,我认同。我不保证我的对,但是我想抖机灵。{"key1":"value1","key2":"value2","key3":"value3"}
是一个对象,我们先用JSON.stringify变一下
'{"key1":"value1","key2":"value2","key3":"value3"}'
变成JSON对象了,嗯好棒,
'"key1":"value1","key2":"value2","key3":"value3"'
我们用substring把两边括号去掉,是不是猜到了?
[""key1":"value1"", ""key2":"value2"", ""key3":"value3""]
我们使用split把上面的字符串通过,分割成数组。
'"key2":"value2"'
访问我们的这个数组,是不是美滋滋
'"value2"'
然后就是在用.split(':')[1]

好了我吧代码放上了

jsonData = {"key1":"value1","key2":"value2","key3":"value3"}
JSON.stringify(jsonData)
    .substring(1,JSON.stringify(jsonData).length -1)
    .split(',')[1]
    .split(':')[1]

你的需求里,key应该有一定规律的吧,根据key的规律,重新组装数据为数组,再通过下标选择

function getNthFromObject(data, nth) {
    if (data == null) return null;
    let n = 0;
    for (let k in data) {
        if (data.hasOwnProperty(k) && n == nth) {
            return data[k];
        }
        n++;
    }
    return null;
}

let data = {name: 'segmentfault', age: 100889, height: '300cm'};
console.log(getNthFromObject(data, 2)); // 300cm 
宣传栏