Я использую JSONStream для чтения очень большого файла JSON, поэтому мне нужно исключить некоторые нежелательные данные (в этом случае я хочу исключить данные до XXXXXXXXXXXXX
(отметка времени в миллисекундах))
JSON Вход
{
"timedetail": [
{
"timestamp": "1410000000000",
"detail": "Won't be selected"
},
{
"timestamp": "1420000000000",
"detail": "Won't be selected"
},
{
"timestamp": "1520000000000",
"detail": "Will be selected"
},
{
"timestamp": "1530000000000",
"detail": "Will be selected"
}
]
}
JSON Путь
timedetail.[?(@.timestamp > '1500000000000')]
Результат (проверено в jsonpath.com )
[
{
"timestamp": "1520000000000",
"detail": "Will be selected"
},
{
"timestamp": "1530000000000",
"detail": "Will be selected"
}
]
Проблема заключается в том, что при реализации этого в JavaScript ничего не возвращается. (Изменено из пример, предоставленный JSONStream )
function readJSON(file, callback) {
var request = require('request')
, JSONStream = require('JSONStream')
, es = require('event-stream')
let result = []
request({ url: file })
.pipe(JSONStream.parse("timedetail.[?(@.timestamp > '1500000000000')]"))
.pipe(es.mapSync(function (data) {
result.push(data.datail)
})).on("end",function(){
callback(result)
})
}
readJSON('path/to/json/file.json', function(result){
console.log(result)
})
Результат
[]
Ожидаемый результат
["Will be selected", "Will be selected"]
Я хотел знать, что вызвало проблему, потому что с этим путем timedetail.*
он выбирает каждые timedetail
записей (как и предполагалось).