使用预先字符串化的JSON片

时间:2015-08-27 12:54:48

标签: javascript json

我们说我已经有了一个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 + '}'

但更愿意避免这种情况。

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

var data = {
    "a":"test1",
    "b":"test2",
    "c":{
        "c1":"test3.1",
        "c2":"test3.2"
    }
}

var object = {};

object["action"] = "save";
object["data"] = data;

console.log(object);

答案 1 :(得分:1)

我问自己同样的问题,并在此指出。 对此有不同的解决方案。我设置了一点jsperf测试。

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

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