需要将json键值对转换为标准数组

时间:2012-01-09 08:36:16

标签: jquery arrays json key-value

我正在使用jquery的parseJSON()函数将json字符串插入到变量中。问题是,它将我的数据转换为对象而不是2d数组。例如,

myData = $.parse(JSON(data));
myData.name// = "Bob"

问题是,“名称”不应该是(假设这是正确的术语)。相反,它应该是:

myData[0] // = "name"
myData[1] // = "Bob"

我该如何转换?或者有一个不同的方法,而不是使用for循环遍历数组的索引(但仍然能够像字符串一样访问键和值,就像在二维数组中一样)。

编辑:这是一些正在使用的json(注意它的时间更长)。这就是“数据”

的内容
{"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"}

2 个答案:

答案 0 :(得分:5)

一旦你反序列化数据(例如,你有myData,这是一个对象),你可以使用for..in循环其键,然后建立一个组合键和值:

var myData, dataArray, key;
myData = $.parse(JSON(data));
dataArray = [];
for (key in myData) {
    dataArray.push(key);         // Push the key on the array
    dataArray.push(myData[key]); // Push the key's value on the array
}

由于myDatadata中反序列化JSON的结果,我们知道myData是一个通用对象(例如,只有{}而不是new Foo {1}}或类似的东西),所以我们甚至不需要hasOwnProperty。如果我们不知道这一点,并且我们只想枚举myData拥有键和值,我们会添加hasOwnProperty支票:

var myData, dataArray, key;
myData = $.parse(JSON(data));
dataArray = [];
for (key in myData) {
    if (myData.hasOwnProperty(key)) {
        dataArray.push(key);         // Push the key on the array
        dataArray.push(myData[key]); // Push the key's value on the array
    }
}

在你的情况下没有理由这样做,除非有人一直在与Object.prototype混在一起(在这种情况下,把他们带到木棚后面,给他们一个严重的隐藏,然后让他们写“我会不要在黑板上用Object.prototype几百次捣乱,但每当你使用for..in时,最好停下来思考是否A)对象保证是香草,B)如果没有,您是否只想要自己的属性,或者您是否也想要它继承的属性?

答案 1 :(得分:1)

var data = $.parse(JSON({"feat_3":"4356","feat_4":"45","feat_5":"564","feat_6":"7566"}));

var arr = [];

for( var i in data ) { 
  if( data.hasOwnProperty( i ) ){ 
    arr.push( i,  data[i] );
  }
}

数组将是:

["feat_3", "4356", "feat_4", "45", "feat_5", "564", "feat_6", "7566"]