首页 > 解决方案 > 如何计算字符串中的特定模式?

问题描述

我们有一些要求有很多实验。我只想计算没有实验。如果它大于某个数字,那么我将阻止这些请求

{
    "context": {
        "requestId": "",
        "locale": "",
        "deviceId": "",
        "currency": "",
        "memberId": 0,
        "cmsOrigin":,
        "experiments": {
            "forceByVariant":,
            "forceByExperiment": [
                {
                    "id": "test",
                    "variant": "A"
                }
            ]
        }        
}

在这个请求中,我只想检查 forceByExperiment 中有多少idvariant。我曾尝试使用正则表达式,但无法做到。任何人在类似的事情之前都会这样做。

我只是用变体分割字符串并计算它们。不确定好主意,但最终目标是弄清楚该请求有很多实验。

标签: javaregexscala

解决方案


使用circe库和 Scala,这是一个简单的解决方案:

import io.circe._, io.circe.parser._


val jsonString = """{
    "context": {
        "requestId": "",
        "locale": "",
        "deviceId": "",
        "currency": "",
        "memberId": 0,
        "cmsOrigin": "foo",
        "experiments": {
            "forceByVariant": [],
            "forceByExperiment": [
                {
                    "id": "test",
                    "variant": "A"
                }
            ]
        }
    }
}"""

  

val parseResult = parse(jsonString)
val nElems = for {
  json <- parse(jsonString)
  array <- json.hcursor.downField("context").downField("experiments").downField("forceByExperiment").as[Seq[Json]]
} yield array.length

println(nElems) // Right(1)

推荐阅读