在nodejs中用双引号切片缓冲区时获取额外的字符

Getting extra characters when slicing buffers with double quotes in nodejs

我正在尝试将 javascript 对象(字符串化)裁剪到确定的大小(专门针对 Apple Push Notification 256 Max),但是我刚刚发现,当我的其中一个变量有一个包含 double 的字符串时引用它会得到一个与限制混淆的额外字符,在下面的示例中我复制了它有 30 个大小限制

var object = {"hola":"mundo", "data":""}

var objectBuffer = new Buffer(JSON.stringify(object))
    console.log(objectBuffer.length) // this should be 26 OK

var data0 = new Buffer('normal', 'utf-8')
console.log(data0.length) // this should be 6 OK

var data1 = new Buffer('"normal', 'utf-8') // Note extra double quote (it only happends with double quotes weird characters like ó work ok)
console.log(data1.length) // this should be 7 OK

object.data = data0.toString('utf-8', 0, 4)
console.log(object) // {hola:'mundo', data:'norm'} OK

var objectBuffer = new Buffer(JSON.stringify(object))
console.log(objectBuffer.length) // this should be 30 OK

object.data = data1.toString('utf-8', 0, 4)
console.log(object) // {hola:'mundo', data:'"norm'} OK

var objectBuffer = new Buffer(JSON.stringify(object))
console.log(objectBuffer.length) // this should be 30 NOT OK got 31 instead

来自 JSON.stringify 的实际字符串在代码末尾是 {"hola":"mundo","data":"\"nor"}。该字符串有 31 个字符,包括用于转义 data 属性 字符串值中的双引号的反斜杠 (\)。反斜杠是 "extra" 字符。

您可以为特殊字符使用自定义替换器并在 JSON.stringify 方法中传递该函数:

请参阅以下部分:"Example of using replacer parameter JSON.stringify(javascriptObject, method);"

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify


    function replacer(key, value) {
        if (typeof value === "string") {
            return undefined;
        }
        return value;
    }

    var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
    var jsonString = JSON.stringify(foo, replacer);