Получение годного к употреблению Json при конвертации из xml - PullRequest
1 голос
/ 31 марта 2020

У меня возникают трудности с получением данных из JSON, которые были автоматически преобразованы из XML, и я был бы признателен за опыт, позволяющий определить наилучший способ достижения моей цели.

У меня есть сообщение xml, которое Я читаю из спокойного сервиса. Я включаю сокращенную анонимную версию сообщения xml внизу поста для справки. Сообщение содержит информацию о человеке, и человек может иметь несколько адресов. Каждый адрес может иметь от нуля до 6 строк адреса, и если значения строки адреса не заполнены, система не включает их в документ xml.

Я конвертирую его в Json, используя функцию json (). Затем я анализирую json, чтобы сделать значения легкодоступными.

Здесь я сталкиваюсь с проблемой.

Когда я преобразую сообщение в Json, используя json () Функция Я получаю схему Json ниже (см. внизу поста). Обратите внимание, что адреса не в формате массива, на самом деле ни один из них не является.

Я не уверен, как извлечь значения из этого способа, который будет работать для других сообщений PersonMessageService, которые не являются указанными c сообщение.

Мои вопросы:

  • Это автоматически создает json неуклюже и не очень удобно?
  • Есть ли лучший способ для генерации json из xml в приложении logi c?
  • Как получить значения из моего json после преобразования?

XML Сообщение

<PersonMessageService version="1.5.3">
<response timestamp="2020-03-31T08:48:42.273557+01:00">
    <status>SUCCESS</status>
    <description/>
    <receipt>A227C1E61EFA2B05E8530100007F6E90</receipt>
</response>
<payload>
    <PersonData>
        <MessageMeta>
            <messageId>123456</messageId>
            <MessageChecksum>c7875a0fd6869bb1234c82bd00712345</MessageChecksum>
        </MessageMeta>
        <personRecord SystemKey="123456789" timestamp="2020-01-31T08:48:35">
            <GUID>9889898</GUID>
            <idNumber>3578951</idNumber>
            <firstName>Joe</firstName>
            <surname>Bloggs</surname>
            <title>Mr</title>
            <gender>M</gender>
            <dateOfBirth>1980-01-01</dateOfBirth>
            <homeAddress addressObjectId="10001" timestamp="2018-11-12T14:58:01">
                <address>
                    <addressLine1>123 Fake St</addressLine1>
                    <country>United States</country>
                </address>
                <email>Joe@bloggs.com</email>
                <mobile>5558878558</mobile>
            </homeAddress>
            <termAddress addressObjectId="10002" timestamp="2018-11-12T15:07:01">
                <address/>
                <email>joebloggs@hotmail.com</email>
            </termAddress>
            <workAddress addressObjectId="10003" timestamp="2018-11-12T15:07:01">
                <address/>
            </workAddress>
            <mailingLabel addressObjectId="10004" timestamp="2018-11-12T14:58:01">
                <address>
                    <addressLine1>58 Fake Bvd</addressLine1>
                    <addressLine2>Fake County</addressLine2>
                    <country>United States</country>
                </address>
            </mailingLabel>
            <referenceNumbers/>
            <personIndicators>
                <country/>
                <nationality/>
                <marketingCorrespondence>N</marketingCorrespondence>
            </personIndicators>
        </personRecord>
    </PersonData>
</payload>

После автоматического преобразования c в JSON с использованием функции JSON ()

{
  "PersonMessageService": {
    "@version": "1.5.3",
    "response": {
      "@timestamp": "2020-03-31T08:48:42.273557+01:00",
      "status": "SUCCESS",
      "description": null,
      "receipt": "A227C1E61EFA2B05E8530100007F6E90"
    },
    "payload": {
      "PersonData": {
        "MessageMeta": {
          "messageId": "123456",
          "MessageChecksum": "c7875a0fd6869bb1234c82bd00712345"
        },
        "personRecord": {
          "@SystemKey": "123456789",
          "@timestamp": "2020-01-31T08:48:35",
          "GUID": "9889898",
          "idNumber": "3578951",
          "firstName": "Joe",
          "surname": "Bloggs",
          "title": "Mr",
          "gender": "M",
          "dateOfBirth": "1980-01-01",
          "homeAddress": {
            "@addressObjectId": "10001",
            "@timestamp": "2018-11-12T14:58:01",
            "address": {
              "addressLine1": "123 Fake St",
              "country": "United States"
            },
            "email": "Joe@bloggs.com",
            "mobile": "5558878558"
          },
          "termAddress": {
            "@addressObjectId": "10002",
            "@timestamp": "2018-11-12T15:07:01",
            "address": null,
            "email": "joebloggs@hotmail.com"
          },
          "workAddress": {
            "@addressObjectId": "10003",
            "@timestamp": "2018-11-12T15:07:01",
            "address": null
          },
          "mailingLabel": {
            "@addressObjectId": "10004",
            "@timestamp": "2018-11-12T14:58:01",
            "address": {
              "addressLine1": "58 Fake Bvd",
              "addressLine2": "Fake County",
              "country": "United States"
            }
          },
          "referenceNumbers": null,
          "personIndicators": {
            "country": null,
            "nationality": null,
            "marketingCorrespondence": "N"
          }
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 31 марта 2020

Вы не получите ничего лучше этого от автоматического c преобразователя - на самом деле, я думаю, что он проделал довольно хорошую работу.

Для лучшего преобразования, чем это, требуется, в частности, человеческий интеллект, понимание модели данных. Но это означает определение ваших собственных правил преобразования для отдельных частей XML. Вы можете достичь этого достаточно легко с XSLT. Новые типы данных и метод сериализации JSON делают это проще с XSLT 3.0, но это также можно сделать в версиях 1.0 или 2.0, просто требуется немного больше усилий.

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