request/lib/json_parser.js

34 lines
753 B
JavaScript
Raw Permalink Normal View History

2020-09-16 20:07:28 +08:00
export function JSONParser() {
this.data = Buffer.from('')
this.bytesWritten = 0
}
JSONParser.prototype.initWithLength = function(length) {
this.data = Buffer.alloc(length)
}
JSONParser.prototype.write = function(buffer) {
if (this.data.length >= this.bytesWritten + buffer.length) {
buffer.copy(this.data, this.bytesWritten)
} else {
this.data = Buffer.concat([this.data, buffer])
}
this.bytesWritten += buffer.length
return buffer.length
}
JSONParser.prototype.end = function() {
var data = this.data.toString('utf8')
var fields
try {
fields = JSON.parse(data)
} catch (e) {
fields = Function(`try{return ${data}}catch(e){}`)() || data
}
2021-06-22 20:19:23 +08:00
this.onField(false, fields)
2020-09-16 20:07:28 +08:00
this.data = null
this.onEnd()
}