У меня есть файл, созданный путем извлечения XHR из XML и его анализа через модуль узла xlm2js, а затем JSON.stringify. Он имеет около 700 сегменты двух основных типов. Это отредактированная версия файла с одним сегмент каждого типа:
{
"NewDataSet": {
"Table": [
{
"SegmentID": [
"2342"
],
"StationID": [
"005es00045:_MN_Stn"
],
"SegmentName": [
"I-5 NB MP0.45 @ SR-14"
],
"SegmentType": [
"2"
],
"SegmentLength": [
"1135"
],
"MinimumLanesReporting": [
"0.5"
],
"CalculationThreshold": [
"30"
],
"CalculationPeriod": [
"2"
],
"MinimumSamples": [
"3"
],
"SegmentMaximumFilter": [
"774"
],
"SegmentMinimumFilter": [
"12"
],
"StandardDeviationSamples": [
"15"
],
"StandardDeviationMultiplier": [
"1.96"
],
"UseStandardDeviationFilter": [
"false"
],
"IsActive": [
"true"
]
},
{
"SegmentID": [
"3051"
],
"BeginningDcuID": [
"584"
],
"EndDcuID": [
"589"
],
"SourceSystem": [
"TravelTime"
],
"SegmentName": [
"OR212 at SE 242nd Ave to OR212 at SE Foster Rd"
],
"SegmentType": [
"1"
],
"SegmentLength": [
"100"
],
"CalculationThreshold": [
"60"
],
"CalculationPeriod": [
"10"
],
"MinimumSamples": [
"3"
],
"SegmentMaximumFilter": [
"3600"
],
"SegmentMinimumFilter": [
"50"
],
"StandardDeviationSamples": [
"20"
],
"StandardDeviationMultiplier": [
"1.96"
],
"UseStandardDeviationFilter": [
"true"
],
"IsActive": [
"true"
]
}
]
}
}
Мне нужно игнорировать сегменты "SegmentType":["2"] и извлекать SegmentID, SegmentName, BeginningDcuID, EndingDcuID и SegmentLength из сегментов типа 1, где IsActive — это true.
Я могу перечислить файл с помощью jq ".", но любая попытка других операций с jq терпит неудачу, обычно с сообщением:
'jq: error: syntax error, unexpected '[' (Unix shell quoting issues?) at , line 1:'
Любые предложения по изменению синтаксиса jq или изменению параметров xml2js, чтобы заставить эту работу работать, будут чрезвычайно полезными.





Никогда не используйте двойные кавычки для цитирования аргумента, если в нем нет ничего, что вы хотите, чтобы оболочка расширила.
$ jq '.NewDataSet.Table[]
| select(.SegmentType[0] != "2" and .IsActive[0] == "true")
| (.SegmentID, .SegmentName, .BeginningDcuID, .EndingDcuID, .SegmentLength)[0]' file
"3051"
"OR212 at SE 242nd Ave to OR212 at SE Foster Rd"
"584"
null
"100"
Спасибо, я не стал добавлять возвраты в пост, потому что не был уверен, что они повлияют на парсинг JQ. Очевидно нет.