Skip to content Skip to sidebar Skip to footer

How Can I Split A String Containing N Concatenated Json String In Javascript/nodejs?

Let's say I receive this string from a socket server (which I cannot control): {'data':{'time':'2016-08-08T15:13:19.605234Z','x':20,'y':30}}{'data':{'time':'2016-08-08T15:13:19.609

Solution 1:

You could just do:

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);

However, this will fail if one of the objects contains the }{ pattern in a string.

Solution 2:

You can split them by the occurrence of } followed directly by { (ignoring whitespace).

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);
}

Solution 3:

Just split when /\}\s*\{/g and pass a value to fill to the Array.prototype.reduce function.

var str = '{"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 data = (function(input) {
  let odd = true;
  
  return input.split(/\}\s*\{/g).reduce(function(res, part, i) {
    if(odd) {
      part += "}";
    } else {
      part = "{" + part;
    }
    
    odd = !odd;
    
    res[i] = JSON.parse(part);
    
    return res;
  }, {});
})(str)

console.log("data:", data);

Post a Comment for "How Can I Split A String Containing N Concatenated Json String In Javascript/nodejs?"