使用预字符串化的JSON片段

Making use of pre-stringified JSON pieces

本文关键字:JSON 片段 字符串      更新时间:2023-09-26

假设我已经有一个JSON字符串;也许我是从服务器那里得到的。

data = '{"a": 1, "b": 2}'

我想使用postMessage或其他需要JSON字符串的API,并以

的形式发送信息
{ action: 'save', data }

当然可以

postMessage(JSON.stringify({ action: 'save', data: JSON.parse(data) });

,但这最终会生成数据,然后立即将其作为字符串化对象的一部分发送给postMessage

是否有任何干净的方法来利用我已经拥有要发送的部分数据的字符串化版本的事实?我很担心这一点,因为实际上数据的长度可能是100K或更多,解析它和字符串化它不是免费的。

注意:我知道我可以发送JSON字符串的数据,并有接收端解析它,但我不能改变接收端的语义。

注2:当然我也可以用各种方式自己构建JSON,比如
'{ "action": "save", "data": ' + data + '}'

您可以尝试这样做:

var data = {
    "a":"test1",
    "b":"test2",
    "c":{
        "c1":"test3.1",
        "c2":"test3.2"
    }
}
var object = {};
object["action"] = "save";
object["data"] = data;
console.log(object);

我也问过自己同样的问题。对此有不同的解决方案。我设置了一个小小的jsperf测试。

最有希望的方法(如果你不需要嵌套的东西)是删除结束并添加字符串化的json:

var stringifiedObject = JSON.stringify({
  some: 'random',
  obj: 'propterties'
});
var res = JSON.stringify({
 outer: 'object'
});
res = res.substring(0, res.length-1) + ', "alreadyString":' + stringifiedObject + '}';