Azure Logi c apps конвертирует XML в JSON, но обрабатывает массив из одного элемента объекта как один объект, как мне с ним справиться при разборе JSON? - PullRequest
0 голосов
/ 23 марта 2020

Я работал над рабочим процессом в Azure приложениях Logi c, которые получают файл XML, который я затем преобразовываю в JSON с помощью json(xml(variables('xmldocument'))), а затем помещаю его в Parse JSON функция, в которую я даю преобразованную JSON в качестве образца полезной нагрузки для генерации схемы. Проблема в том, что у меня есть несколько временных рядов в файле, почти все из которых содержат много объектов. Но, в конце концов, есть одна серия времен, содержащая только один объект. И это создает проблему, потому что временные серии обрабатываются как массив объектов, но последние временные серии содержат только один объект, без массива, и при синтаксическом анализе JSON всегда возникает ошибка. Вот пример файла:

<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="blank">
  <mRID>9</mRID>
  <schedule_Time_Period.timeInterval>
    <start>2020-03-20T23:00Z</start>
    <end>2020-03-21T23:00Z</end>
  </schedule_Time_Period.timeInterval>
  <TimeSeries>
    <mRID>c</mRID>
    <businessType>B</businessType>
    <Period>
      <timeInterval>
        <start>2020-03-20T23:00Z</start>
        <end>2020-03-21T23:00Z</end>
      </timeInterval>
      <resolution>P</resolution>
      <Point>
        <position>1</position>
        <quantity>2</quantity>
      </Point>
      <Point>
        <position>2</position>
        <quantity>2</quantity>
      </Point>
    </Period>
  </TimeSeries>
  <TimeSeries>
    <mRID>56</mRID>
    <version>1</version>
    <businessType>A</businessType>
    <Period>
      <timeInterval>
        <start>2020-03-20T23:00Z</start>
        <end>2020-03-21T23:00Z</end>
      </timeInterval>
      <resolution>P1D</resolution>
      <Point>
        <position>1</position>
        <quantity>1.0652</quantity>
      </Point>
    </Period>
  </TimeSeries>
</Document>

У вас есть идеи, как с этим бороться? Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Нашел довольно простое решение: я просто использую type: ["array","object"], при указании типа временных рядов в схеме.

0 голосов
/ 23 марта 2020

В этом случае, я думаю, это проблема, вызванная дизайном. Если в <TimeSeries> есть только один объект, он будет рассматриваться как объект, но не как массив. Для обходного пути мы можем добавить в него еще одну указанную c запись. Затем он будет обрабатываться как массив, и мы можем выполнить некоторые операции позже, чтобы удалить эту указанную c запись. В противном случае, я не думаю, что метод xml () может соответствовать нашим требованиям автоматически.

Вот еще один пост , который я предоставил в прошлом для решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...