Мул 4: преобразование SQL XML объекта в JSON - PullRequest
0 голосов
/ 06 августа 2020

Я получаю SQLXML набор результатов как результат хранимой процедуры MS SQL, вызываемой из формы Database Execute Stored Procedure.

Набор результатов SQLXML выглядит так:

<xmlcontent>
   <field1>val1</field1>
   <field2>val2</field2>
   <field3>val3</filed3>
</xmlcontent>
<xmlcontent>
   <field1>val1</field1>
   <field2>val2</field2>
   <field3>val3</filed3>
</xmlcontent>
<xmlcontent>
   <field1>val1</field1>
   <field2>val2</field2>
   <field3>val3</filed3>
</xmlcontent>

Однако полезная нагрузка немного странная, поскольку она содержит вывод XML длиной 2033, а затем повторяется как элемент массива до тех пор, пока полезная нагрузка не будет исчерпана. Вывод формы преобразования с полезной нагрузкой показывает:

{
  "resultSet1": [
    {
      "XML_F52E2B61-18A1-11d1-B105-00805F49916B": "<xmlcontent><field1/><field2/><field3/>" --this content is of size 2033 max
    },
    {
      "XML_F52E2B61-18A1-11d1-B105-00805F49916B": "</xmlcontent><xmlcontent><field1/><fiel" --this content is of size 2033 max
    },
    {
      "XML_F52E2B61-18A1-11d1-B105-00805F49916B": "d2/><field3/><xmlcontent>"
    }
  ]
}

Я думаю об использовании другой формы преобразования, чтобы добавить значения «XML_F52E2B61-18A1-11d1-B105-00805F49916B» из массива resultset1, а затем преобразовать на JSON. Есть ли способ в переплетении данных упростить этот подход, чтобы получить окончательный результат JSON, как показано ниже?

    [
   {
      "field1": "val1",
      "field2": "val2",
      "field3": "val3"
   },
   {
      "field1": "val1",
      "field2": "val2",
      "field3": "val3"
   },
   {
      "field1": "val1",
      "field2": "val2",
      "field3": "val3"
   }
]

1 Ответ

0 голосов
/ 09 августа 2020

Ввод:

{
  "resultSet1": [
    {
      "XML_F52E2B61-18A1-11d1-B105-00805F49916B": "<xmlcontent><field1>val1</field1><field2>val2</field2><field3>val3</field3>" 
    },
    {
      "XML_F52E2B61-18A1-11d1-B105-00805F49916B": "</xmlcontent><xmlcontent><field1>val1</field1><fiel" 
    },
    {
      "XML_F52E2B61-18A1-11d1-B105-00805F49916B": "d2>val2</field2><field3>val3</field3></xmlcontent>"
    }
  ]
}

Скрипт:

%dw 2.0
output application/json
var id='XML_F52E2B61-18A1-11d1-B105-00805F49916B'
var body=payload.resultSet1 map (
    $[id]) reduce ((item, accumulator) -> accumulator ++ item)

---
read('<root>' ++ body ++ '</root>', "application/xml").root.*xmlcontent

Выход:

[
  {
    "field1": "val1",
    "field2": "val2",
    "field3": "val3"
  },
  {
    "field1": "val1",
    "field2": "val2",
    "field3": "val3"
  }
]
...