Intro

This is my own code snippet for Apache Nifi. It stands for reminding me to catch json parsing and processing flow file.

Code Snippet

package com.creamsugardonut

import groovy.json.JsonOutput
import groovy.json.JsonSlurper

class TestMatrixToConverter {

    static void main(String[] args) {
        def jsonSlurper = new JsonSlurper()
        def body = StringBuilder.newInstance()
        def number = 1

        def line = "{\"t_id\":\"436219846\",\"t_timestamp\":1.511426387E12,\"t_props\":{\"user_key\":\"123\",\"admin_recm_yn\":\"N\",\"del_yn\":\"N\",\"plylst_type_code\":\"TYPE1\",\"dsply_order\":\"3\",\"admin_open_yn\":\"Y\",\"song_cnt\":\"159\",\"djmag_reg_yn\":\"N\",\"cate_type_code\":null,\"cate_code\":null,\"open_yn\":\"N\",\"del_posbl_yn\":\"Y\",\"reg_date\":\"2017-11-13 00:35:04.000\",\"plylst_title\":\"title\",\"fame_reg_yn\":\"N\",\"updt_date\":\"2017-11-23 17:39:47.000\"},\"t_songs\":[\"123\",\"456\"]}"

        def obj = jsonSlurper.parseText(line)

        obj.t_props.each { key, val ->
            if (key.contains("BASKET")) {
                convertBasketToArray(obj, key)
            }
        }

        if (obj.get("t_id") != null) {
            obj.put("id", obj.get("t_id").toString())
            obj.remove("t_id")
        } else {
            obj.put("from", obj.get("t_from").toString())
            obj.remove("t_from")

            obj.put("to", obj.get("t_to").toString())
            obj.remove("t_to")

            obj.put("label", obj.get("t_label"))
            obj.remove("t_label")
        }

        obj.put("timestamp", obj.get("t_timestamp"))
        obj.remove("t_timestamp")


        obj.put("props", obj.get("t_props"))
        obj.remove("t_props")

        if (obj.get("props") != null) {
            convertToInteger(obj, "play_time")
            convertToInteger(obj, "svc_avail_flg")
            removeIfNull(obj, "song_name")
            removeIfNull(obj, "rep_song_id")
            removeIfNull(obj, "album_id")
            removeIfNull(obj, "album_name")
            removeIfNull(obj, "album_img_path")
            removeIfNull(obj, "issue_date")
            removeIfNull(obj, "order_issue_date")
            removeIfNull(obj, "reg_date")

            removeIfNull(obj, "act_type_name")
            removeIfNull(obj, "artist_img_path")
            removeIfNull(obj, "artist_name")

            removeIfNull(obj, "album_img_path")
            removeIfNull(obj, "rep_song_name")

            removeIfNull(obj, "birthday")
            removeIfNull(obj, "gender")
            removeIfNull(obj, "prefe_artist")
            removeIfNull(obj, "prefe_gnr")
            removeIfNull(obj, "prefe_style")
            convertToInteger(obj, "main_use_dow")
            convertToInteger(obj, "main_use_tmz")
            convertToInteger(obj, "ad_age_band")

            if (obj.get("t_songs") == null) {
                if ("true".equals(obj.props.get("top100_yn"))) {
                    obj.props.put("top100_yn", true)
                } else {
                    obj.props.put("top100_yn", false)
                }
            } else {
                if ("true".equals(obj.props.get("admin_open_yn"))) {
                    obj.props.put("admin_open_yn", true)
                } else {
                    obj.props.put("admin_open_yn", false)
                }
                if ("true".equals(obj.props.get("admin_recm_yn"))) {
                    obj.props.put("admin_recm_yn", true)
                } else {
                    obj.props.put("admin_recm_yn", false)
                }
                if ("true".equals(obj.props.get("del_posbl_yn"))) {
                    obj.props.put("del_posbl_yn", true)
                } else {
                    obj.props.put("del_posbl_yn", false)
                }
                if ("true".equals(obj.props.get("del_yn"))) {
                    obj.props.put("del_yn", true)
                } else {
                    obj.props.put("del_yn", false)
                }
                if ("true".equals(obj.props.get("djmag_reg_yn"))) {
                    obj.props.put("djmag_reg_yn", true)
                } else {
                    obj.props.put("djmag_reg_yn", false)
                }
                if ("true".equals(obj.props.get("djmag_reg_yn"))) {
                    obj.props.put("djmag_reg_yn", true)
                } else {
                    obj.props.put("djmag_reg_yn", false)
                }
                if ("true".equals(obj.props.get("open_yn"))) {
                    obj.props.put("open_yn", true)
                } else {
                    obj.props.put("open_yn", false)
                }

                obj.props.put("songs", obj.get("t_songs"))
                obj.remove("t_songs")
            }
        }

        if (number != 1) {
            body << ","
        }

        body << JsonOutput.toJson(obj)

        println "body = " + body
    }

    def static convertBasketToArray(obj, key) {
        if (obj.t_props.get(key) != null && obj.t_props.get(key).length() > 0)
            obj.t_props.put(key, obj.t_props.get(key).tokenize("@#%@#%"))
    }

    def static convertToInteger(obj, key) {
        if (obj.props.get(key) == null) {
            obj.props.remove(key)
        } else {
            obj.props.put(key, obj.props.get(key).toInteger())
        }
    }

    def static removeIfNull(obj, key) {
        if (obj.props.get(key) == null) {
            obj.props.remove(key)
        }
    }
}