Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Распарсить JSON файл с использованием JOLT  [new]
kirill demidov
Member

Откуда:
Сообщений: 20
Добрый день,
у меня есть проблема со спецификацией для JOLT трансформации для такого JSON файла:
{"id" : "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
  "ts" : 1583684304500000,
  "measurements" : {
    "A4" : {
      "value" : 164341584
    },
    "A5" : {
      "value" : -20486832
    }


мне необходимо получить вот такой output:
{"id" : "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
"ts" : 1583684304500000,
"A4" : 164341584,
"A5" : -20486832
}


я уже сломал голову как это сделать!
помогите,а?

Спасибо
9 мар 20, 09:37    [22095547]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3267
kirill demidov
Добрый день,
у меня есть проблема со спецификацией для JOLT трансформации для такого JSON файла:
{"id" : "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
  "ts" : 1583684304500000,
  "measurements" : {
    "A4" : {
      "value" : 164341584
    },
    "A5" : {
      "value" : -20486832
    }


мне необходимо получить вот такой output:
{"id" : "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
"ts" : 1583684304500000,
"A4" : 164341584,
"A5" : -20486832
}


я уже сломал голову как это сделать!
помогите,а?

Спасибо


Можете закрутить json в map, отредактировать map и обратно преобразовать в json.

Хорошего вам дня!
10 мар 20, 20:14    [22096413]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
mayton
Member

Откуда: loopback
Сообщений: 45472
kirill demidov, покажи свой исходник где ты ломал голову.

Ты-ж понимаешь что программист "думает кодом".
Или ты в уме собрался писать?
10 мар 20, 20:27    [22096415]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
kirill demidov,не знаю что такое джолт ,судя по всему если я о нем не знаю это какая то ненужная шляпа
а если у тебя задача из одного джейсона сделать другой напиши обычный мапер в три строчки кода
если хочешь я тебе его бесплатно завтра сваяю
10 мар 20, 21:12    [22096437]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
kirill demidov
Member

Откуда:
Сообщений: 20
mayton,
вот спецификация, которую я использую вот [url=]https://jolt-demo.appspot.com/#bucketToPrefixSoup[/url]


[
{
"operation": "shift",
"spec": {
"id": "id",
"ts": "ts",
"measurement": {
"*": "&"
}
}
}
]
10 мар 20, 21:17    [22096440]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
kirill demidov
Member

Откуда:
Сообщений: 20
asv79,
спасибо - но мне это нужно в процессоре apache nifi - поэтому просто решение в коде не поможет
10 мар 20, 21:17    [22096441]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
Valentin Kolesnikov


Можете закрутить json в map, отредактировать map и обратно преобразовать в json.

Хорошего вам дня!

зачем в мапу класть? плодить мусор в памяти не есть хорошо
10 мар 20, 21:20    [22096443]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
mayton
Member

Откуда: loopback
Сообщений: 45472
Это Джолт? https://github.com/bazaarvoice/jolt
10 мар 20, 22:03    [22096458]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
mayton
Это Джолт? https://github.com/bazaarvoice/jolt

json to json transformation rly?))
wow this is amazing)))

я честно не понимаю что делает эта библиотека)
10 мар 20, 22:18    [22096463]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
mayton
Member

Откуда: loopback
Сообщений: 45472
Я почитал примеры. Кажется понял. Это аналог XSLT/XPath.
Есть исходный Json документ. И есть DSL для трансформации его в другой документ.

Предполагается этот DSL тоже пишется не на java а на json.

Вот тут тестовое приложение

https://github.com/bazaarvoice/jolt/blob/master/jolt-core/src/test/java/com/bazaarvoice/jolt/sample/JoltSample.java

И тут тестовые данные

https://github.com/bazaarvoice/jolt/tree/master/jolt-core/src/test/resources/json/sample
10 мар 20, 22:23    [22096465]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
mayton,

да смысл общий понятен ,Вопрос нах оно?
этот мапер написать дел 10 секунд- зачем тащить какие то кастомные либы себе в проект ?
тоесть например в энтерпрайзе это сразу нет
в каких то инди проектах мей би?вопрос для чего?
ну тоесть такое себе из разряда писедержателя на писуаре))
предлагаю автора в бан - скорей всего реклама этой шляпы
меня в админы
10 мар 20, 22:29    [22096469]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
mayton


Предполагается этот DSL тоже пишется не на java а на json.

не представляю даже кто может это реализовать ,а главно для чего)
писать джейсон и тянуть либу себе в проект ,вместо одного метода из двух строчек?
я как раз щас эти маперы пилю и честно не вижу бенефита от юза этой либы
10 мар 20, 22:34    [22096474]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
mayton
Member

Откуда: loopback
Сообщений: 45472
asv79
mayton,

да смысл общий понятен ,Вопрос нах оно?
этот мапер написать дел 10 секунд- зачем тащить какие то кастомные либы себе в проект ?
тоесть например в энтерпрайзе это сразу нет
в каких то инди проектах мей би?вопрос для чего?
ну тоесть такое себе из разряда писедержателя на писуаре))
предлагаю автора в бан - скорей всего реклама этой шляпы
меня в админы


Смысл - тот-же что и Блиновские константы. Экстернализация логики. Логика трансформации Json
выносится из Java кода и становится ПАРАМЕТРОМ. Тоесть ее можно передать тоже как аргумент.
Ее можно положить во внешний файл. Или передать как аргумент к сервлету или к REST методу.

+Автоматически у нас появляются законы и гарантии. Если надо разработать много (+100500)
таких трансформеров то мы гарантируем что они работают в безопасном контексте и не делают
никаких файловых и сетевых операций. Тоесть их разработку можно поручать индусами
и китайцам и делать минимальное code-review.
10 мар 20, 23:00    [22096490]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
asv79
Member

Откуда: Тверь
Сообщений: 2991
mayton


Смысл - тот-же что и Блиновские константы. Экстернализация логики. Логика трансформации Json
выносится из Java кода и становится ПАРАМЕТРОМ. Тоесть ее можно передать тоже как аргумент.
Ее можно положить во внешний файл. Или передать как аргумент к сервлету или к REST методу.

+Автоматически у нас появляются законы и гарантии. Если надо разработать много (+100500)
таких трансформеров то мы гарантируем что они работают в безопасном контексте и не делают
никаких файловых и сетевых операций. Тоесть их разработку можно поручать индусами
и китайцам и делать минимальное code-review.

это понятно - непонятно зачем мне тащить кучу кода в проект - если я напишу свой мапер за несколько строк кода
причем например у нас все маперы тянут за хвост жука- сможет ли вот эта нонейм либа это сделать? думаю нет
при передаче параметров она тупо ляжет)

нее майтон - тут я с тобой не согласен - джейсон ту джейсон это почти всегда свои фишки и никакая библиотека сторонняя не зная вводных данных тебе не поможет
10 мар 20, 23:11    [22096496]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
mayton
Member

Откуда: loopback
Сообщений: 45472
А jsp? Те-же яйца. А XSLT? А SPEL? Droolz?

Это все доменно специфичные языки которые решают одну узкую задачу.

Кстати ты не надейся что будешь писать только на java. Поговори с бывалыми.
10 мар 20, 23:25    [22096510]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
kirill demidov
Member

Откуда:
Сообщений: 20
Коллеги, боюсь что я не полностью себя объяснил - я разработчик BI\BigData - я не пишу приложения на Java, а использую готовые инструменты open source - такие как Apache Nifi - ELT/ETL service.

У меня стояла задача выгрузить из RabbitMQ данные в postgres - я получал JSON в одном формате и должен был каждое сообщение записать в таблицу в другом формате. В nifi есть несколько способов решения этой задачи - в том числе и с помощью кастомного скрипта (вот тут и можно было обойтись простым мэпером), но я как best practice стараюсь как можно меньше дописывать компонентов - трудно потом поддерживать. Другой способ это использовать JOLT processor, в котором необходимо было прописать спецификацию с которой и запутался - отсюда и вопрос.

Но в итоге я получил ответ в stock overflow с подходящей спецификацией, которая решила проблему:
[
  {
    "operation": "shift",
    "spec": {
      "ts": "ts",
      "id": "id",
      "measurements": {
        "*": {
          "*": {
            "@": "&2"
          }
        }
      }
    }
  }
]


Благодарю всех за активное участие и желание помочь!
10 мар 20, 23:37    [22096518]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
mayton
Member

Откуда: loopback
Сообщений: 45472
Ну ты и жук!

Всех напряг а сам тихо запостил в стековер.
11 мар 20, 12:27    [22096762]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3267
mayton
Ну ты и жук!

Всех напряг а сам тихо запостил в стековер.


В SO быстрее отвечают видимо.

https://stackoverflow.com/questions/60589638/jolt-transformation-unnesting-problem-with-json

Хорошего вам дня!
11 мар 20, 14:26    [22096874]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
Dmitry.
Member

Откуда: Boston, MA
Сообщений: 843
в nifi можно на груви писать а в груви есть мапы

https://stackoverflow.com/questions/48477929/nifi-how-to-write-sub-nested-element-in-json/48478312#48478312
12 мар 20, 18:20    [22097886]     Ответить | Цитировать Сообщить модератору
 Re: Распарсить JSON файл с использованием JOLT  [new]
mayton
Member

Откуда: loopback
Сообщений: 45472
Да все поезд ушел. Автор жеж пишет. Я дескыть не Java-разраб. Зря парились. И топик можно закрыть.
13 мар 20, 16:46    [22098681]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить