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

我试图裁剪一个JavaScript对象(string)到一个确定的大小(专门为苹果推送通知256最大),但是我刚刚发现,当我的一个variables有一个string包含双引号它得到一个额外的字符混乱限制,在下面的例子中,我复制它有一个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 

您可以使用自定义replace项来replace特殊字符,并在JSON.stringify方法中传递该函数:

请参阅以下部分:“使用replace参数JSON.stringify(javascriptObject,方法)的示例;”

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


    函数replace器(key,value){
         if(typeof value ===“string”){
            返回undefined;
         }
        返回值;
     }

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

JSON.stringify中的实际string是{"hola":"mundo","data":"\"nor"} ,该string有31个字符,包括反斜杠( \ )用于转义double在data属性的string值中引用。反斜杠是“额外”字符。