Хобрук: Ваш путь к мастерству в программировании

Как замаскировать все значения с определенным именем ключа во вложенном иерархическом объекте с помощью оператора обновления DataWeave?

Я пытаюсь выборочно обновить некоторые значения во вложенной иерархической структуре данных.

У меня есть вложенные входные данные, такие как

 var flights = 
{
  "flights": {
    "flight": {
      "airline-name": "american",
      "flight-code": "AA103",
      "plane-type": null,
      "longitude": "33.94250107",
      "price": "+750.00",
      "destination": {
        "airport-name": "los angeles international airport",
        "city": "los angeles",
        "altitude": "125",
        "longitude":"33.94250107"
    }
  },
    
  "flight": {
      "available-seats": "+18.00",
      "longitude": "33.94250107",
      "airline-name": "delta",
      "plane-type": "boeing 747",
      "destination": {
        "airport-name": "los angeles international airport",
        "longitude": "33.94250107"
      }
    }
 
 }
}

Я хочу замаскировать все долготы на всех уровнях одним оператором case.

flights dw::util::Values::update {
  case dest at .flights.*flight.*destination.longitude  -> "******"
  case ptype at .flights.*flight.*"plane-type" if((ptype ~= null)) -> "*******"
}

совпадает только с целевым значением.

{
  "flights": {
    "flight": {
      "airline-name": "american",
      "flight-code": "AA103",
      "plane-type": "*******",
      "longitude": "33.94250107",
      "price": "+750.00",
      "destination": {
        "airport-name": "los angeles international airport",
        "city": "los angeles",
        "altitude": "125",
        "longitude": "******"
      }
    },
    "flight": {
      "available-seats": "+18.00",
      "longitude": "33.94250107",
      "airline-name": "delta",
      "plane-type": "boeing 747",
      "destination": {
        "airport-name": "los angeles international airport",
        "longitude": "******"
      }
    }
  }
}

Кроме того, есть ли способ сделать что-то вроде полета .. * пункта назначения вместо жесткого кодирования пути?

27.10.2020

  • Я думаю, вам нужно будет сделать. * Longitude вместо .longitude. Однако проще было бы просто использовать функцию маски. 28.10.2020

Ответы:


1

Вы можете попробовать использовать функцию маски:

%dw 2.0
output application/json
import * from dw::util::Values
var flights = 
{
  "flights": {
    "flight": {
      "airline-name": "american",
      "flight-code": "AA103",
      "plane-type": null,
      "longitude": "33.94250107",
      "price": "+750.00",
      "destination": {
        "airport-name": "los angeles international airport",
        "city": "los angeles",
        "altitude": "125",
        "longitude":"33.94250107"
    }
  },
    
  "flight": {
      "available-seats": "+18.00",
      "longitude": "33.94250107",
      "airline-name": "delta",
      "plane-type": "boeing 747",
      "destination": {
        "airport-name": "los angeles international airport",
        "longitude": "33.94250107"
      }
    }
 
 }
}
---
(flights mask "longitude" with "****") mask "plane-type" with "****"

Выход:

{
  "flights": {
    "flight": {
      "airline-name": "american",
      "flight-code": "AA103",
      "plane-type": "****",
      "longitude": "****",
      "price": "+750.00",
      "destination": {
        "airport-name": "los angeles international airport",
        "city": "los angeles",
        "altitude": "125",
        "longitude": "****"
      }
    },
    "flight": {
      "available-seats": "+18.00",
      "longitude": "****",
      "airline-name": "delta",
      "plane-type": "****",
      "destination": {
        "airport-name": "los angeles international airport",
        "longitude": "****"
      }
    }
  }
}
27.10.2020
Новые материалы

Еженедельный выпуск React 75
Добро пожаловать в 75-й выпуск React Weekly, еженедельный обзор последних ссылок и руководств по React и React Native. Посетите Купить кофе , чтобы найти способы поддержать React Weekly, или..

(Почти) полнофункциональная реализация Gumbel MuZero в Джулии.
TLDR; Gumbel Muzero — это современный алгоритм обучения с подкреплением. Он достиг сверхчеловеческой производительности во многих настольных играх и даже, что более впечатляюще, в Atari..

Передача нейронного стиля в браузерах с использованием Angular и WebDNN
В последние годы глубокое обучение привлекло большое внимание из-за его безупречной производительности при обучении на обширных данных и высокой точности при выводе. Развертывание этих алгоритмов..

Шифр Цезаря в C
Шифр Цезаря  — один из самых простых и широко известных методов шифрования. Он включает в себя сдвиг каждой буквы в сообщении на определенное количество позиций в алфавите. В этой статье мы..

Исследовательский анализ данных (EDA)
Что такое ЭДА? Анализ данных, который ищет закономерности в данных, известен как исследовательский анализ данных. Это похоже на беглый просмотр данных, чтобы найти наиболее важные..

1x1 Convolution: демистификация
Чтобы пролить свет на концепцию операции свертки 1x1, которая представлена ​​в статье «Сеть в сети» Лин и др. и Google Inception Некоторое время назад я прочитал статью «Сеть в сети» (NiN),..

Лучшие расширения VS Code в 2022 году
Код ВС Лучшие расширения VS Code в 2022 году Список самых полезных расширений VS Code, которые вы можете использовать как разработчик в 2022 году Расширения находятся на рынке VS Code,..