Javascript 在nodejs中使用双引号切片缓冲区时获取额外字符
我试图将一个javascript对象(stringized)裁剪到一个确定的大小(特别是针对Apple Push Notification 256 Max),但是我刚刚发现,当我的其中一个变量有一个包含双引号的字符串时,它会得到一个与限制不符的额外字符,在下面的示例中,我复制了一个30大小的限制Javascript 在nodejs中使用双引号切片缓冲区时获取额外字符,javascript,node.js,encoding,buffer,special-characters,Javascript,Node.js,Encoding,Buffer,Special Characters,我试图将一个javascript对象(stringized)裁剪到一个确定的大小(特别是针对Apple Push Notification 256 Max),但是我刚刚发现,当我的其中一个变量有一个包含双引号的字符串时,它会得到一个与限制不符的额外字符,在下面的示例中,我复制了一个30大小的限制 var object = {"hola":"mundo", "data":""} var objectBuffer = new Buffer(JSON.stringify(object)) c
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”:“\”或“}
。该字符串包含31个字符,包括用于转义数据
属性字符串值内的双引号的反斜杠(\
)。反斜杠是“额外的”“字符。您可以为特殊字符使用自定义替换程序,并在JSON.stringify方法中传递该函数:
请参阅以下部分:“使用替换参数JSON.stringify(javascriptObject,方法)的示例”
函数替换程序(键、值){
如果(值的类型==“字符串”){
返回未定义;
}
返回值;
}
var foo={基金会:“Mozilla”,型号:“盒子”,周:45,运输:“汽车”,月:7};
var jsonString=JSON.stringify(foo,replacer);
这就是对象和objectBuffer如何结束构建>对象{hola:'mundo',数据:''nor'}>objectBuffer.toString()'{“hola”:“mundo”,“data”:“\\”或“}”>JSON.stringify中的实际字符串是
{“hola”:“mundo”,“data”:“\\”或“}”
在代码末尾。该字符串包含31个字符,包括用于转义数据
属性字符串值内双引号的\字符。我认为这是您的罪魁祸首。只需在代码末尾再次记录stringized对象,您就会明白我的意思。这可能很方便:)我实际上使用了regex替换结束了r更改转义字符\n\r\t“\
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);