Сравнение строк в JSONPath в JSONStream.parse (путь) - PullRequest
0 голосов
/ 25 марта 2020

Я использую 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 записей (как и предполагалось).

...