将数组的数组重组为哈希数组并转换为JSON
Reorganize array of arrays to array of hashes and convert to JSON
我有以下数组
var arr=[[10,20,30],[12,21,33],[13,23,35]];
如何将该数组转换为JSON。预期的结果
myJSONarr=[
{"x":10 ,"y":20,"z":30},
{"x":12 ,"y":21,"z":33},
{"x":13, "y":23,"z":35}
];
我想我必须定义字符串数组
var objArray=["x","y","z"];
和do用eval()
函数遍历这两个值。如有任何帮助,不胜感激。
如果你使用jquery:
var arr=[[10,20,30],[12,21,33],[13,23,35]],
myjson = JSON.stringify($.map(arr,function(a){return {x:a[0],y:a[1],z:a[2]}}));
http://jsfiddle.net/herostwist/yDRwh/如果你使用prototype:
var myjson = JSON.stringify([[10,20,30],[12,21,33],[13,23,35]].map(function(a){
return {x:a[0],y:a[1],z:a[2]}}));
http://jsfiddle.net/herostwist/yDRwh/1/我的版本。编辑:我没有树枝objArray不是问题的一部分,但OP的建议作为解决方案的一部分。好吧,反正我喜欢。
var arr=[[10,20,30],[12,21,33],[13,23,35]];
var objArray=["x","y","z"];
var myJSONarr = [];
for (var idx = 0; idx != arr.length; idx++) {
var row = {};
for (var idx2 = 0; idx2 != objArray.length; idx2++) {
row[objArray[idx2]] = arr[idx][idx2];
}
myJSONarr.push(row);
}
alert(JSON.stringify(myJSONarr));
有很多不同的答案,这是另一个:
http://jsfiddle.net/Vecqc/<textarea id="text" style="width: 100%;"></textarea>
var arr = [[10,20,30],[12,21,33],[13,23,35]];
var stringify = [];
for (var i = 0; i < arr.length; i++) {
stringify[i] = {'x':arr[i][0],'y':arr[i][0],'z':arr[i][0]};
}
document.getElementById('text').value = JSON.stringify(stringify);
假设您只想将值映射到JavaScript对象†:
var objs = [];
for(var i = 0, l = arr.length; i < l; i++) {
var p = arr[i];
objs.push({x: p[0], y: p[1], z: p[2]});
}
如果你真的想创建一个JSON字符串,那么你可以把这个数组传递给 JSON.stringify
。JSON
可以在所有现代浏览器中使用,并且可以在旧的浏览器中加载。
†:为什么我在这里假设?因为人们混淆了JSON和JavaScript对象字面量。在您的代码中,myJSONarr
是而不是 JSON。它是一个JS对象数组。如果数据包含在字符串中,则为JSON:
var myJSONarr = '[{"x":10, "y":20, "z":30}, ...]';
JSON != JavaScript object
您所描述的不仅仅是JSON转换。您实际上有一个包含三个元素的数字数组的数组,您需要的是用于哈希数组的JSON,其中每个三元组都成为"x","y","z"的哈希。
无论如何,如果你想要一个简单的。tojson()函数,Prototype.js在大多数对象上都包含了一个。tojson()函数,这使它变得非常容易。
http://www.prototypejs.org/learn/json未经考验的……
var arr=[[10,20,30],[12,21,33],[13,23,35]];
var myarrOfXYZ = arr.collect(function(T){ return $H({ x: T[0], y: T[1], z: T[2] }) });
var myJSON = myarrOfXYZ.toJSON();
注意,prototype还提供了一个函数"zip",可以在第2行使用,而不是$H
只需循环遍历数组并从其中的每个数组创建一个字符串,然后将字符串连接起来形成JSON字符串:
var items = [];
for (var i = 0; i < arr.length; i++) {
items.push('{"x":'+arr[i][0]+',"y":'+arr[i][1]+',"z":'+arr[i][2]+'}');
}
var myJSONarr = '[' + items.join(',') + ']';
First:
var arr = [[10,20,30], [12,21,33], [13,23,35]];
var arr2 = [];
for (var i in arr) {
var a = arr[i];
arr2.push({
x: a[0],
y: a[1],
z: a[2]
});
}
或者,使用高阶函数:
var labels = ["x", "y", "z"];
var arr = [[10,20,30], [12,21,33], [13,23,35]];
var arr2 = arr.map(function(a) {
return a.reduce(function(prev, curr, i) {
prev[labels[i]] = curr;
return prev;
}, {});
});
然后直接将新数组转换为JSON
- 使用JS将数组转换为json对象
- 本地存储中的字符串到字节数组转换
- Javascript函数,用于将数组转换为“;2-元组”;
- php数组转换为javascript
- 在Javascript中将一个值和字符串数组转换为if语句
- 将数组转换为javascript格式的字符串
- 如何将数组转换为有效的json
- JSON数组转换为JS对象数组
- 如何将数组转换为映射
- JavaScript:将字符串数组转换为文本区域
- javascript |数组转换
- 数组转换为多个字符串
- Javascript将数组转换为字符串并使其反向输出
- 将Byte数组转换为Angularjs中的Base64字符串
- 将对象数组转换为与nodejs/pg/unnest兼容的数组
- 将Javascript数组转换为PHP数组
- 将数组转换为键值对
- 使用Ramda将对象数组转换为普通对象
- javascript将对象数组转换为字符串以存储在s3中
- 使用.join方法将数组转换为不带逗号的字符串