Преобразование файла JSON для добавления ключей к значениям массива

#json #apache-nifi #jolt

#json #apache-nifi #jolt

Вопрос:

Я использую Apache NiFi и получаю от встроенного micro через сокет TCP / IP файл JSON вида:

{ «id»: 123456, «ip»: «192.168.1.1», «t»: -12.9, «T»: -23.8, «variables»: [ «user1», 0, -12.97, 23.87 ] }

и хотел бы преобразовать его таким образом, чтобы ключи переменных добавлялись так, как они мне известны, следующим образом:

{ «id»: 123456, «ip»: «192.168.1.1», «t»: -12.9, «T»: -23.8, «переменные»: [ «имя пользователя»: «пользователь1», «действительный»: 0, «температура 1»: -12.97, «температура 2»: 23.87 ] }

а затем для доступа к паре ключ-значение, такой как variables.username.

Я пытался использовать JoltTransformJSON, но не знаю, как правильно написать спецификацию, если она может это сделать!! Я написал следующую спецификацию jolt:

[ { «operation»: «shift», «spec»: { «id»: «id», «ip»: «ip», «t»: «t», «T»: «T», «variables»: { «username»: «», «valid»: «», «temperature 1»: «», «temperature 2»: «» } } } ]

Я также пытался использовать updateRecord с помощью программы чтения / записи записей, но передача правильной схемы вызывает ошибку в первой переменной, поскольку она не может сопоставить «user1» с ключом из исходного JSON.

Комментарии:

1. проверьте процессор JoltTransformJson

2. Пытались использовать процессор JoltTransformJson, но не смогли заставить его работать. Даже пытался использовать jolt-demo.appspot.com . Я также пытался использовать updateRecord с помощью программы чтения / записи записей, но передача правильной схемы вызывает ошибку в первой переменной

3. пожалуйста, отредактируйте свой вопрос и предоставьте свое преобразование jolt, тогда, возможно, кто-нибудь поможет вам с этим. также добавьте jolt тег/

Ответ №1:

Мне удалось разработать спецификацию Jolt следующим образом:

[ { «операция»: «сдвиг», «спецификация»: { «id»: «id», «ip»: «ip», «t»: «t», «T»: «T», «переменные»: { «0»: «имя пользователя», «1»: «допустимый», «2»: «температура 1», «3»: «температура 2» } } } ]

Спасибо, Дэггетт, за ваш вклад.