【问题标题】:Making use of pre-stringified JSON pieces利用预字符串化的 JSON 片段
【发布时间】:2015-11-21 20:55:01
【问题描述】:

假设我已经有一个 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 + '}'

但宁愿避免这种情况。

【问题讨论】:

    标签: javascript json


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      我问自己同样的问题,并被指向这里。 对此有不同的解决方案。我设置了一点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 + '}';
      

      【讨论】:

        猜你喜欢
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-26
        • 2014-08-25
        • 1970-01-01
        相关资源
        最近更新 更多