Разбор результата XML -> XML2JS -> JSON.stringify с использованием JQ - PullRequest
0 голосов
/ 09 июня 2019

У меня есть файл, созданный с помощью 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: синтаксическая ошибка, неожиданный' ['(проблемы с цитированием оболочки Unix?) В строке 1:'

Любые предложения по изменению синтаксиса jq или xml2js изменениям параметров для этой работы были бы чрезвычайно полезны.

1 Ответ

1 голос
/ 09 июня 2019

Никогда не используйте двойные кавычки для цитирования аргумента, если в нем нет ничего для расширения оболочки.

$ 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"
...