angulartypescriptjsonlinesndjsonoboe.js

How to match each new line delimited json object in oboe's node-event in Angular2 app?


I have API that returns data like this:

{"t":"point","id":817315,"tableid":141,"classid":142,"state":0,"loc":[6850735.34375,24501674.0039063]}
{"t":"line","id":817314,"tableid":204,"classid":2102,"loc":[[6850335.8828125,24501476.50390625],[6850341.48828125,24501476.8828125],[6850362.171875,24501492.21484375],[6850387.4140625,24501508.86328125],[6850442.66796875,24501545.69921875],[6850502.34375,24501584.0078125],[6850558.3359375,24501619.37109375],[6850611.375,24501654.73046875],[6850671.05078125,24501693.04296875],[6850708.62109375,24501687.1484375],[6850735.34375,24501674.00390625]]}

With code like this:

    oboe('http://localhost:19100/pn/api/v1/fetch?cgid=22&north=6853000.0&east=24505000&south=6850000.0&west=24500000.0')
    .node('*', (row) => {
        console.log(row);

        return oboe.drop;
    })
    .done(() => {

        return oboe.drop;
    })
    .fail((err) => {
        // error
        console.log('oboe fail ', err);
        return oboe.drop;
    });

We come to node-callback not with each line but with each separate value. I.e the value of row is 1st time "point", 2nd time 817315, 3rd time 141 and so on.

My goal is to have json object on each line to be read into an object.

I asked the similar question but because the 1st issue was api service CORS issue it became CORS question which i retitled according to that.


Solution

  • This answers only to question: How to match each json object with node pattern?

    Each line representing json object is matched with pattern '!' so the code is something like this:

            oboe(url)
            .node('!', (row) => {
                console.log(row);
            })
            .on('end', () => {
                console.log('Stream finished');
            });
    

    code above logs each json object and "Stream finished" when all json objects are handled.

    The title and question is now modified to match this answer better and i'm probably asking another more specific question.