Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript/nodejs中拆分包含n个串联json字符串的字符串?_Javascript_Json_Node.js - Fatal编程技术网

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

如何在javascript/nodejs中拆分包含n个串联json字符串的字符串?,javascript,json,node.js,Javascript,Json,Node.js,假设我从套接字服务器(我无法控制)收到此字符串: 我不能使用JSON.parse,因为它包含2个JSON字符串,所以如何将其拆分为 var jsonString1 = {"data":{"time":"2016-08-08T15:13:19.605234Z","x":20,"y":30}} 及 注意:我可能有1到n个连接在一起的Json字符串,实际上您可以通过出现}来拆分它们,后跟{(忽略空格) var parts=str.split(/\}\s*\{/g); 对于(变量i=0;i

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

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

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


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

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

var parts=str.split(/\}\s*\{/g);
对于(变量i=0;i
您只需执行以下操作:

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(净化);

console.log(res);
仅在
/\}\s*\{/g
时分割,并将要填充的值传递给
数组.prototype.reduce
函数

var str='{“数据”:{“时间”:“2016-08-08T15:13:19.605234Z”,“x”:20,“y”:30}{“数据”:{“时间”:“2016-08-08T15:13:19.609522Z”,“x”:30,“y”:40}”
变量数据=(函数(输入){
让奇=真;
返回input.split(/\}\s*\{/g).reduce(函数(res,part,i){
if(奇数){
部分+=“}”;
}否则{
部分“=”{“+部分;
}
奇数=!奇数;
res[i]=JSON.parse(部分);
返回res;
}, {});
})(str)

console.log(“data:,data);
因此,首先需要一个json数组。然后,应该首先解析json数组,然后分别解析每个json。这就是我使用Newtonsoft的.net库所做的。我将循环遍历字符串的每个字符,计算“{”和“}”字符的数量。一旦{}等于“}”的数量您知道您的第一个JSON字符串已经结束。当然,除了启动循环时,这两个字符串的数量都是0如何使用
split(“}{”)
拆分原始字符串?但是每个JSON都包含嵌套对象。如果数据是:{}?@Veverke这些对象将被逗号分割。我尝试了一些不太硬的东西。但是,如果这解决了问题,答案是:)@Veverke JSON不允许使用未替换的
}{
字符串之外的任何位置。非常简洁,因此您可以检查。为什么这个字符串的源不返回JSON数组?我希望用逗号分隔包含“数据”的每个不同js对象属性。如果他控制了源代码,我会解决这个问题,让事情变得更直观。它可以工作,但我想打印x,y:看,我在这里问补充问题:这里得到的是一个对象数组。如果你想访问第二个对象的
x
属性,你必须执行
res[1]。data.x
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}} 
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);
}