如何在 Angular2 应用程序的双簧管节点事件中匹配每个新行分隔的 json 对象?
How to match each new line delimited json object in oboe's node-event in Angular2 app?
我有 API returns 这样的数据:
{"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]]}
使用这样的代码:
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;
});
我们不是用每一行而是用每个单独的值来进行节点回调。即行的值是第 1 次 "point",第 2 次 817315,第 3 次 141 等等。
我的目标是让每行上的 json 个对象被读入一个对象。
我问了类似的 但因为第一个问题是 api 服务 CORS 问题所以它变成了 CORS 问题我根据那个重新命名。
此服务器响应是一种不良做法。由于您的 API 在本地主机上是 运行 我相信您可以更改此响应。请让您的 API 响应一个 JSON 数组。
[
{"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]]}
]
这仅回答问题:如何将每个 json object 与节点模式匹配?
代表 json object 的每一行都与模式 '!' 匹配所以代码是这样的:
oboe(url)
.node('!', (row) => {
console.log(row);
})
.on('end', () => {
console.log('Stream finished');
});
当处理完所有 json object 时,上面的 代码记录每个 json object 和 "Stream finished"。
现在修改了标题和问题以更好地匹配这个答案,我可能会问另一个更具体的问题。
我有 API returns 这样的数据:
{"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]]}
使用这样的代码:
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;
});
我们不是用每一行而是用每个单独的值来进行节点回调。即行的值是第 1 次 "point",第 2 次 817315,第 3 次 141 等等。
我的目标是让每行上的 json 个对象被读入一个对象。
我问了类似的
此服务器响应是一种不良做法。由于您的 API 在本地主机上是 运行 我相信您可以更改此响应。请让您的 API 响应一个 JSON 数组。
[
{"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]]}
]
这仅回答问题:如何将每个 json object 与节点模式匹配?
代表 json object 的每一行都与模式 '!' 匹配所以代码是这样的:
oboe(url)
.node('!', (row) => {
console.log(row);
})
.on('end', () => {
console.log('Stream finished');
});
当处理完所有 json object 时,上面的 代码记录每个 json object 和 "Stream finished"。
现在修改了标题和问题以更好地匹配这个答案,我可能会问另一个更具体的问题。