Толчок генерирует нулевые значения в качестве вывода преобразования и не может быть удален - PullRequest
0 голосов
/ 04 мая 2018

У меня есть этот JSON в качестве ввода:

{
  "BusinessInfo": {
    "MemberInformation": {
      "Item": [
        {
          "Relation": {
            "Item": [
              {
                "Partner1": "0072938063",
                "Partner2": "0072938064",
                "CategoryId": "BUR001"
              },
              {
                "Partner1": "0072938063",
                "Partner2": "0072937669",
                "CategoryId": "ZCRM06"
              },
              {
                "Partner1": "0072938063",
                "Partner2": "3000011685",
                "CategoryId": "ZCRM06"
              },
              {
                "Partner1": "1020002423",
                "Partner2": "0072938063",
                "CategoryId": "ZCRM01"
              },
              {
                "Partner1": "0072938067",
                "Partner2": "0072938063",
                "CategoryId": "ZCRM04"
              },
              {
                "Partner1": "0072938063",
                "Partner2": "0072937669",
                "CategoryId": "ZCRM04"
              },
              {
                "Partner1": "0072938063",
                "Partner2": "0072938065",
                "CategoryId": "ZCRM04"
              }
            ]
          }
        }
      ]
    }
  }
}

И эта спецификация Джолта:

[
  {
    "operation": "shift",
    "spec": {
      "BusinessInfo": {
        "MemberInformation": {
          "Item": {
            "*": {
              "Relation": {
                "Item": {
                  "*": {
                    "CategoryId": {
                      "ZCRM04": {
                        "@(2,Partner1)": "[&3].Partner1",
                        "@(2,Partner2)": "[&3].Partner2"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

Имея в результате, это:

[ null, null, null, null, {
  "Partner1" : "0072938067",
  "Partner2" : "0072938063"
}, {
  "Partner1" : "0072938063",
  "Partner2" : "0072937669"
}, {
  "Partner1" : "0072938063",
  "Partner2" : "0072938065"
} ]

Проблема с сгенерированными нулевыми значениями. Мне нужен тот же результат, но без них. Я попытался удалить их, добавив эти операции в спецификации:

  {
    "operation": "default",
    "spec": {
      "*": "TRASH"
    }
  },
  {
    "operation": "remove",
    "spec": {
      "TRASH": ""
    }
  }

Но не работает, результат почти тот же, только теперь вместо нуля появляется "TRASH":

[ "TRASH", "TRASH", "TRASH", "TRASH", {
  "Partner1" : "0072938067",
  "Partner2" : "0072938063"
}, {
  "Partner1" : "0072938063",
  "Partner2" : "0072937669"
}, {
  "Partner1" : "0072938063",
  "Partner2" : "0072938065"
} ]

Что может быть не так? В первое преобразование или в следующие две операции добавлено. Можно ли избежать этого при первом преобразовании?

1 Ответ

0 голосов
/ 04 мая 2018

Причина, по которой у вас есть нулевые значения в выходном массиве, заключается в том, что ваш входной массив "Item" содержит 7 элементов. И вы используете эти 7 признаков массива для определения выходного массива.

В частности, эти строки

"Item": {
  "*": {
    "CategoryId": {
      "ZCRM04": {
        "@(2,Partner1)": "[&3].Partner1",
        "@(2,Partner2)": "[&3].Partner2"

В ваших примерах входных данных "ZCRM04" является CategoryId в элементах массива Item 5, 6, 7.

Таким образом, первые 0 - 4 элемента не совпадают, но элемент 5 соответствует, и спецификация говорит, что скопируйте данные из "@ (2, Partner1)" в 5-й индекс выходного массива.

"[&3].Partner1"  -->  "[5].Partner1"  

Таким образом, в этом случае shift создаст выходной массив с 6 элементами, где элементы с 0 по 4 равны нулю.

С Jolt, если вы хотите «фильтровать» элементы массива И изменять / изменять содержимое этих элементов массива, вам нужно сделать два шага.

Spec

[
  {
    "operation": "shift",
    "spec": {
      "BusinessInfo": {
        "MemberInformation": {
          "Item": {
            "*": {
              "Relation": {
                "Item": {
                  "*": {
                    "CategoryId": {
                      "ZCRM04": {
                        // in this first shift
                        //  just "identify" all the 
                        //  Item entries needs
                        "@2": "temp[]"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "temp": {
        "*": {
          // now for each original "Item" 
          //  "fix" it.
          // In this case only pass thru 
          //  Partner1 and 2
          "Partner1": "[&1].Partner1",
          "Partner2": "[&1].Partner2"
        }
      }
    }
  }
]
...