如何在循环中使用case并合并map中的数据

问题描述 投票:0回答:0

我有字符串数据,我必须根据要求修改并将其转换为 JSON 我在检查匹配类型的地方创建了 getSymbolForFilter 函数 但是在 formatGa4DimensionFilters 函数中,我必须在 clojure 中为所需的 o/p 格式编写逻辑

    (ns user
      (:require [clojure.string :as str])
      (:gen-class)) 
      
      (defn formatGa4DimensionFilters [stringData]
          (doseq [semiFormat (str/split stringData #";")] 
                 (if (str/includes? semiFormat ",")
                   (def symbolFilter (ga4DimensionFilters semiFormat))
                   (def symbolFilter2 (get-symbol-for-filter semiFormat))
                   )
                 (println symbolFilter2)
                  (case symbolFilter
                    "=~" (println "x is =~") 
                    "!~" (println "x is !~")
                    "=@" (println "x is =@")
                    "!@" (println "x is !@")
                    "==" (println "x is ==")
                    "!=" (println "x is !=")
                    (println "x is not defined"))
                 ))
    
      (defn ga4DimensionFilters [semiFormat] 
        (doseq [commaFormat (str/split semiFormat #",")]
          (def filterSymbol (get-symbol-for-filter commaFormat))
          ) 
        filterSymbol
        ) 
      
    (defn get-symbol-for-filter [string]
      (doseq [ga4-filter-symbols ["=~","!~","=@","!@","==","!="]]
        (def match-found (str/includes? string ga4-filter-symbols))
        (if (boolean match-found)
          (def filterMatch ga4-filter-symbols)))
      filterMatch) 
    
    (def stringData "ga:city==San Jose,ga:city==Bengaluru;ga:country=~India;ga:country!~United States")
    
    (formatGa4DimensionFilters stringData)

请帮助我获得我在下面提到的所需的 json 数据。

输入数据

"ga:city==San Jose,ga:city==Bengaluru;ga:country=~India;ga:country!~United States"

输出数据

{
  "andGroup": {
    "expressions": [
      {
        "orGroup": {
          "expressions": [
            {
              "filter": {
                "fieldName": "ga:city",
                "stringFilter": {
                  "value": "San Jose",
                  "matchType": "EXACT"
                }
              }
            },
            {
              "filter": {
                "fieldName": "ga:city",
                "stringFilter": {
                  "value": "Bengaluru",
                  "matchType": "EXACT"
                }
              }
            }
          ]
        }
      },
      [
        {
          "filter": {
            "fieldName": "ga:country",
            "stringFilter": {
              "value": "India",
              "matchType": "PARTIAL_REGEXP"
            }
          }
        }
      ],
      [
        {
          "notExpression": {
            "filter": {
              "fieldName": "ga:country",
              "stringFilter": {
                "value": "United States",
                "matchType": "PARTIAL_REGEXP"
              }
            }
          }
        }
      ]
    ]
  }
}
clojure
© www.soinside.com 2019 - 2024. All rights reserved.