Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JSON中从TypedArray中删除键_Javascript_Json_Node.js_Compression - Fatal编程技术网

Javascript 如何在JSON中从TypedArray中删除键

Javascript 如何在JSON中从TypedArray中删除键,javascript,json,node.js,compression,Javascript,Json,Node.js,Compression,我试图将Javascript中的大型类型化数组存储到JSON文件中 在对一个类型化数组进行字符串化之后,我使用节点的文件流系统将JSON字符串存储在一个新文件中 到目前为止还不错,但是,一旦我检查了新创建的文件,我注意到这个文件的大小非常大。 在查看了文件中存储的实际文本后,我注意到在减小文件大小方面有很多改进的潜力 此示例结构说明了实际JSON字符串中的数组结构: {“数据”:[{“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“

我试图将Javascript中的大型类型化数组存储到JSON文件中

在对一个类型化数组进行字符串化之后,我使用节点的文件流系统将JSON字符串存储在一个新文件中

到目前为止还不错,但是,一旦我检查了新创建的文件,我注意到这个文件的大小非常大。 在查看了文件中存储的实际文本后,我注意到在减小文件大小方面有很多改进的潜力

此示例结构说明了实际JSON字符串中的数组结构:

{“数据”:[{“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:“我的钥匙”:

现在,在谷歌搜索了一下之后,我发现这正是我想要用我的阵列做的。不幸的是,这个库是为php制作的,我尝试了其他库,比如使用某种压缩算法的各种库。(LZW,放气/gzip)

我发现所有使用某种压缩算法的库都无法为我的问题提供解决方案,因为我必须在进一步压缩文件之前删除密钥

不幸的是,像JSONC这样有前途的库在我使用它们的函数
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,…]}}
这正是我的问题,我如何才能做到这一点