Javascript 如何在JSON中从TypedArray中删除键
我试图将Javascript中的大型类型化数组存储到JSON文件中 在对一个类型化数组进行字符串化之后,我使用节点的文件流系统将JSON字符串存储在一个新文件中 到目前为止还不错,但是,一旦我检查了新创建的文件,我注意到这个文件的大小非常大。 在查看了文件中存储的实际文本后,我注意到在减小文件大小方面有很多改进的潜力 此示例结构说明了实际JSON字符串中的数组结构: {“数据”:[{“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”: 现在,在谷歌搜索了一下之后,我发现这正是我想要用我的阵列做的。不幸的是,这个库是为php制作的,我尝试了其他库,比如使用某种压缩算法的各种库。(LZW,放气/gzip) 我发现所有使用某种压缩算法的库都无法为我的问题提供解决方案,因为我必须在进一步压缩文件之前删除密钥 不幸的是,像JSONC这样有前途的库在我使用它们的函数Javascript 如何在JSON中从TypedArray中删除键,javascript,json,node.js,compression,Javascript,Json,Node.js,Compression,我试图将Javascript中的大型类型化数组存储到JSON文件中 在对一个类型化数组进行字符串化之后,我使用节点的文件流系统将JSON字符串存储在一个新文件中 到目前为止还不错,但是,一旦我检查了新创建的文件,我注意到这个文件的大小非常大。 在查看了文件中存储的实际文本后,我注意到在减小文件大小方面有很多改进的潜力 此示例结构说明了实际JSON字符串中的数组结构: {“数据”:[{“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“
JSONC.compress()。它们的JSONC.pack()
函数也会崩溃,但会发出错误消息。在查看了github上与JSONC相关的问题之后,我意识到这个项目可能已经死了
现在回到我最初的问题,是否可以从数组中的每个值中删除键?如果是这样的话:什么是最明智的方法
为了澄清问题,关键点不是由我创建的,也不是存在于我的对象中!我只想字符串化一个类型化数组,但不需要在最后的JSON字符串中为数组中的每个值获取一个键
这样的结果将是完美的,并极大地减小了我的文件大小:
{“数据”:{“键”:[“我的键],“数据”:[“我的谷1”,“我的谷2”,“我的谷3”,“我的谷4”,“我的谷5”,“我的谷6”,“我的谷7”,“我的谷8”,“我的谷9”]}
您想要的工作示例:
var dataObject = {
"data": [{
"my_key": "my_val1"
}, {
"my_key": "my_val2"
}, {
"my_key": "my_val3"
}, {
"my_key": "my_val4"
}, {
"my_key": "my_val5"
}, {
"my_key": "my_val6"
}, {
"my_key": "my_val7"
}, {
"my_key": "my_val8"
}, {
"my_key": "my_val 9 "
}]
};
var newDataObject = { "data": {} };
var data = dataObject.data;
for (var i = 0; i < data.length; i++) {
for (key in data[i]) {
if (!newDataObject.data.hasOwnProperty(key)) {
newDataObject.data[key] = [];
}
newDataObject.data[key].push(data[i][key]);
}
}
console.log("New data object is ", JSON.stringify(newDataObject, null, 4));
var数据对象={
“数据”:[{
“我的钥匙”:“我的钥匙1”
}, {
“我的钥匙”:“我的钥匙2”
}, {
“我的钥匙”:“我的钥匙3”
}, {
“我的钥匙”:“我的钥匙4”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙9”
}]
};
var newDataObject={“数据”:{};
var data=dataObject.data;
对于(变量i=0;i
您想要的工作示例:
var dataObject = {
"data": [{
"my_key": "my_val1"
}, {
"my_key": "my_val2"
}, {
"my_key": "my_val3"
}, {
"my_key": "my_val4"
}, {
"my_key": "my_val5"
}, {
"my_key": "my_val6"
}, {
"my_key": "my_val7"
}, {
"my_key": "my_val8"
}, {
"my_key": "my_val 9 "
}]
};
var newDataObject = { "data": {} };
var data = dataObject.data;
for (var i = 0; i < data.length; i++) {
for (key in data[i]) {
if (!newDataObject.data.hasOwnProperty(key)) {
newDataObject.data[key] = [];
}
newDataObject.data[key].push(data[i][key]);
}
}
console.log("New data object is ", JSON.stringify(newDataObject, null, 4));
var数据对象={
“数据”:[{
“我的钥匙”:“我的钥匙1”
}, {
“我的钥匙”:“我的钥匙2”
}, {
“我的钥匙”:“我的钥匙3”
}, {
“我的钥匙”:“我的钥匙4”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙”
}, {
“我的钥匙”:“我的钥匙9”
}]
};
var newDataObject={“数据”:{};
var data=dataObject.data;
对于(变量i=0;i
JSON.stringify将类型化数组视为具有基于0的索引的对象,而不是数组。使用before编码将类型化数组转换为标准数组将起作用,例如:
var myTypedArray = new Float32Array([0.1, 323.3, 0, 2.2]);
console.log(JSON.stringify(myTypedArray)); // looks like an object
var stdArray = Array.from(myTypedArray);
console.log(JSON.stringify(stdArray)); // looks like an array
然后将JSON转换回类型化数组:
var json = "[0.1, 323.3, 0, 2.2]";
var myTypedArray = new Float32Array(JSON.parse(json));
stringify将类型化数组视为具有基于0的索引的对象,而不是数组。使用before编码将类型化数组转换为标准数组将起作用,例如:
var myTypedArray = new Float32Array([0.1, 323.3, 0, 2.2]);
console.log(JSON.stringify(myTypedArray)); // looks like an object
var stdArray = Array.from(myTypedArray);
console.log(JSON.stringify(stdArray)); // looks like an array
然后将JSON转换回类型化数组:
var json = "[0.1, 323.3, 0, 2.2]";
var myTypedArray = new Float32Array(JSON.parse(json));
您可以使用replacer函数作为JSON.stringify
的第二个参数,将类型化数组转换为普通数组。无需修改或创建对象
(k,v)=>ArrayBuffer.isView(v)?数组。从(v):v
const myObj={
浮动:新的浮动数组([0.5,3.1,-0.2,8.0]),
UINT:新的UINT16阵列([259,2]),
};
返回JSON.stringify(myObj,(k,v)=>ArrayBuffer.isView(v)?Array.from(v):v,/*indent*/2);
您可以使用replacer函数作为JSON.stringify
的第二个参数,将类型化数组转换为普通数组。无需修改或创建对象
(k,v)=>ArrayBuffer.isView(v)?数组。从(v):v
const myObj={
浮动:新的浮动数组([0.5,3.1,-0.2,8.0]),
UINT:新的UINT16阵列([259,2]),
};
返回JSON.stringify(myObj,(k,v)=>ArrayBuffer.isView(v)?Array.from(v):v,/*indent*/2);
你不能按键对这个列表进行分组吗?我的意思是,类似于:{data:{my_key:[my_val1,my_val2,…]}}
这正是我的问题,我如何做到这一点?^^^相关:这似乎不相关,因为它们有显式创建的带有键属性的对象。我得到的只是一个json字符串,我无法从我的对象中删除“键”,因为json本身正在为我键入的数组中的每个值创建键(每个值的键就是它在数组中的位置;从0-n开始)。你不能按键对这个列表进行分组吗?我的意思是,类似于:{data:{my_key:[my_val1,my_val2,…]}}
这正是我的问题,我如何才能做到这一点