如何在 javascript/nodejs 中拆分包含 n 个连接的 json 字符串的字符串?

新手上路,请多包涵

假设我从套接字服务器(我无法控制)收到此字符串:

 {"data":{"time":"2016-08-08T15:13:19.605234Z","x":20,"y":30}}{"data":{"time":"2016-08-08T15:13:19.609522Z","x":30,"y":40}}

我不能使用 JSON.parse,因为它包含 2 个 Json 字符串,所以我如何拆分成

var jsonString1 = {"data":{"time":"2016-08-08T15:13:19.605234Z","x":20,"y":30}}

var jsonString2 = {"data":{"time":"2016-08-08T15:13:19.609522Z","x":30,"y":40}}

注意:实际上我可能有 1 到 n 个 Json 字符串连接在一起

原文由 user310291 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 298
2 个回答

你可以这样做:

 var data = '{"data":{"time":"2016-08-08T15:13:19.605234Z","x":20,"y":30}}{"data":{"time":"2016-08-08T15:13:19.609522Z","x":30,"y":40}}';

var sanitized = '[' + data.replace(/}{/g, '},{') + ']';
var res = JSON.parse(sanitized);

console.log(res);

但是,如果其中一个对象在字符串中包含 }{ 模式,这将失败。

原文由 Arnauld 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过出现 } 后跟 { (忽略空格)来拆分它们。

 var parts = str.split(/\}\s*\{/g);
for(var i = 0; i < parts.length; i++) {
  var part = parts[i].trim();

  if(part[0] !== '{') part = '{' + part;
  if(part[part.length-1] !== '}') part += '}';

  var json = JSON.parse(part);
}

原文由 micah 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题