如何在javascript/nodejs中拆分包含n个串联json字符串的字符串?
假设我从套接字服务器(我无法控制)收到此字符串: 我不能使用JSON.parse,因为它包含2个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
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);
}