Apache Camel / regex заменяет символы - PullRequest
0 голосов
/ 23 января 2019

У нас есть строка JSON, возвращаемая в результате запроса oData.

  1. Мы хотим убрать знак "@" в тегах
    • @odata.etag
    • msdyn_journaltype@OData.Community.Display.V1.FormattedValue
    • msdyn_endtime@OData.Community.Display.V1.FormattedValue
    • и т.д.
  2. Не касаясь значения адреса электронной почты, например «email»: «bob@thebuilder.com».

Я прочитал документацию Apache Camel по адресу http://camel.apache.org/simple.html, Я могу использовать

${in.body.replace('@', '')}

но адрес электронной почты также будет удален.

Конечно, я могу сделать это в несколько шагов, например

${in.body.replace('msdyn_journaltype@OData.Community.Display.V1.FormattedValue', 'msdyn_journaltypeOData.Community.Display.V1.FormattedValue')}

но это можно сделать лучше, верно? Я думал о функции регулярного выражения Apache Camel, но не так хорошо разбирался в регулярных выражениях.

Кто-то, кто знает хитрости регулярных выражений?

{
  "@odata.context": "https:\/\/xxx.api.crm4.dynamics.com\/api\/data\/v9.0\/$metadata#bookableresourcebookings(name,msdyn_milestraveled,msdyn_actualarrivaltime,statecode,msdyn_workorder(foc_sapordernumber),Resource(name,foc_sapresourcenumber,email),msdyn_bookableresourcebooking_msdyn_bookingjournal_Booking(msdyn_journaltype,msdyn_name,msdyn_starttime,msdyn_endtime,msdyn_duration,foc_sapstatisticalkeyfigurecod,statecode))",
  "@odata.count": 9,
  "value": [
    {
      "@odata.etag": "W\/\"5775823\"",
      "name": "Wartung 2011153  - Wartung - 181 L1205 Stuttgarter Str.\/Aichbr\u00fccke ",
      "msdyn_milestraveled@OData.Community.Display.V1.FormattedValue": "0,00",
      "msdyn_milestraveled": 0,
      "msdyn_actualarrivaltime@OData.Community.Display.V1.FormattedValue": "30.10.2018 08:55",
      "msdyn_actualarrivaltime": "2018-10-30T08:55:00Z",
      "statecode@OData.Community.Display.V1.FormattedValue": "Active",
      "statecode": 0,
      "bookableresourcebookingid": "bd90b7e6-18dc-e811-a95a-000d3a29f080",
      "msdyn_workorder": {
        "foc_sapordernumber": "856900132812"
      },
      "Resource": {
        "name": "Bob the Builder",
        "foc_sapresourcenumber": "00290035",
        "email": "bob@thebuilder.com"
      },
      "msdyn_bookableresourcebooking_msdyn_bookingjournal_Booking": [
        {
          "@odata.etag": "W\/\"5775798\"",
          "msdyn_journaltype@OData.Community.Display.V1.FormattedValue": "Working Hours",
          "msdyn_journaltype": 690970000,
          "msdyn_name": "Wartung 2011153  - Wartung - 181 L1205 Stuttgarter Str.\/Aichbr\u00fccke ",
          "msdyn_starttime@OData.Community.Display.V1.FormattedValue": "29.10.2018 14:30",
          "msdyn_starttime": "2018-10-29T14:30:00Z",
          "msdyn_endtime@OData.Community.Display.V1.FormattedValue": "29.10.2018 16:00",
          "msdyn_endtime": "2018-10-29T16:00:00Z",
          "msdyn_duration@OData.Community.Display.V1.FormattedValue": "90",
          "msdyn_duration": 90,
          "foc_sapstatisticalkeyfigurecod": "",
          "statecode@OData.Community.Display.V1.FormattedValue": "Active",
          "statecode": 0,
          "_msdyn_booking_value@OData.Community.Display.V1.FormattedValue": "Wartung 2011153  - Wartung - 181 L1205 Stuttgarter Str.\/Aichbr\u00fccke ",
          "_msdyn_booking_value": "bd90b7e6-18dc-e811-a95a-000d3a29f080",
          "msdyn_bookingjournalid": "fd340afc-39dc-e811-a95a-000d3a29f080"
        },
        {
          "@odata.etag": "W\/\"5775795\"",
          "msdyn_journaltype@OData.Community.Display.V1.FormattedValue": "Travel",
          "msdyn_journaltype": 690970002,
          "msdyn_name": "Test WPLAN ohne Vertragstermine III  - Wartung - Bismarckplatz Ost ",
          "msdyn_starttime@OData.Community.Display.V1.FormattedValue": "29.10.2018 13:32",
          "msdyn_starttime": "2018-10-29T13:32:00Z",
          "msdyn_endtime@OData.Community.Display.V1.FormattedValue": "29.10.2018 14:30",
          "msdyn_endtime": "2018-10-29T14:30:00Z",
          "msdyn_duration@OData.Community.Display.V1.FormattedValue": "58",
          "msdyn_duration": 58,
          "foc_sapstatisticalkeyfigurecod": "",
          "statecode@OData.Community.Display.V1.FormattedValue": "Active",
          "statecode": 0,
          "_msdyn_booking_value@OData.Community.Display.V1.FormattedValue": "Wartung 2011153  - Wartung - 181 L1205 Stuttgarter Str.\/Aichbr\u00fccke ",
          "_msdyn_booking_value": "bd90b7e6-18dc-e811-a95a-000d3a29f080",
          "msdyn_bookingjournalid": "d52eafbd-42dc-e811-a95a-000d3a29f080"
        }
      ],
      "msdyn_bookableresourcebooking_msdyn_bookingjournal_Booking@odata.nextLink": "https:\/\/xxx.api.crm4.dynamics.com\/api\/data\/v9.0\/bookableresourcebookings(bd90b7e6-18dc-e811-a95a-000d3a29f080)\/msdyn_bookableresourcebooking_msdyn_bookingjournal_Booking?$select=msdyn_journaltype,msdyn_name,msdyn_starttime,msdyn_endtime,msdyn_duration,foc_sapstatisticalkeyfigurecod,statecode"
    }
  ],
  "msdyn_bookableresourcebooking_msdyn_bookingjournal_Booking@odata.nextLink": "https:\/\/xxx.api.crm4.dynamics.com\/api\/data\/v9.0\/bookableresourcebookings(3931de11-f86d-41a8-b483-c9416d20bf0c)\/msdyn_bookableresourcebooking_msdyn_bookingjournal_Booking?$select=msdyn_journaltype,msdyn_name,msdyn_starttime,msdyn_endtime,msdyn_duration,foc_sapstatisticalkeyfigurecod,statecode"
}

1 Ответ

0 голосов
/ 23 января 2019

Глядя на ваши данные, я чувствую, что вы можете заменить все @, за которыми следует OData, при условии, что нет электронного письма, в котором у вас есть OData в качестве имени домена. Следовательно, вы можете использовать это регулярное выражение,

(?i)@(?=OData)

Здесь (?i) гарантирует, что совпадение нечувствительно к регистру, а (?=OData) положительный взгляд вперед гарантирует, что @ немедленно сопровождается OData

И заменить его пустой строкой.

Демо

Дайте мне знать, если это хорошо для вас.

Редактировать: Включая @Link и @Id в дополнение к @OData и также заменяя \/ на / глобально (а не только атрибут имени), вы можете использовать это регулярное выражение,

(?i)@(?=(?:OData|link|id)\b)|\\(\/)

И замените его на $1 или \1 в зависимости от вашего языка.

Проверьте это демо

Если вы не хотите заменять \/ на / глобально, вы можете использовать это регулярное выражение,

(?i)@(?=(?:OData|link|id)\b)

И заменить его пустой строкой

И, как я уже говорил в комментарии, для замены \/ на / в атрибуте только name вам придется использовать некоторый программный код.

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