【问题标题】:Need to convert json key-value pairs to standard array需要将json键值对转换为标准数组
【发布时间】:2012-02-05 19:47:54
【问题描述】:

我正在使用 jquery 的 parseJSON() 函数将 json 字符串插入到变量中。问题是,它把我的数据变成了一个对象而不是一个二维数组。例如,

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"}

【问题讨论】:

  • 你能显示你填写的代码吗data
  • 添加了一个 json 的 sn-p,是你要找的吗?
  • 这似乎有点奇怪,如果你不介意我的话。为什么要创建一个包含键和值的平面数组?
  • 那么鲍勃在哪里?因为它会像 feat_3 可能是 bob 而不是 4356
  • 是的,我使用了您的示例,而不是将其移动到更有意义的“平面数组”中。

标签: jquery arrays json key-value


【解决方案1】:

一旦你反序列化了数据(例如,你有 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
}

由于myData 是反序列化data 中的JSON 的结果,我们知道myData 是一个通用对象(例如,只是一个{} 而不是new Foo 或类似的东西),所以我们甚至不需要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)如果不是,你只想要它自己的属性,还是您也想要它继承的属性?

【讨论】:

  • 第一个代码块运行良好。它的工作方式,我什至不需要将它们移动到新阵列。我可以在该循环本身中分配数据。精彩的!谢谢
【解决方案2】:
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"]

【讨论】:

  • 谢谢,但我发现 TJ 的解决方案比我原先计划的转换为二维数组更好。
  • 已更正。在push 方法中,您可以应用多个参数来填充数组
猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2016-03-18
  • 2020-11-26
  • 2014-05-26
  • 2020-08-30
  • 1970-01-01
  • 2014-01-31
相关资源
最近更新 更多