从具有特殊字符格式的 JSON 输入消息中解析值

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

我期望读取 where(key = Canonical message) 的值 值格式是许多字段的组合,我希望在下面提到的有效负载部分中读取“casetTitle”值并设置属性 使用 JsonSlurper()

Input JsoN
    {
        "Id": "db338737-af14-ef11-9f8a-000d3aad8ef7",
        "InputParameters": [
            {
           
                "key": "CanonicalMessage",
                "value": "{\"ActivityId\":\"9f368268\",\"Payload\":{\"CaseTitle\":\"Material Description 000\",\"CustomerAssetNumber\":\"104628\"}}"
            }
            
            {
                   "key": "transactionlogid",
                    "value": "9f36828e9"
            }
        ]
        
         }

如何通过使用 JsonSlurper() 来实现这一点?

非常感谢

您真诚的 萨提什

groovy
1个回答
0
投票

它看起来像下面这样。 请记住,我必须转义引号转义序列,因为我将其内联到字符串文字中。 否则,语言将被解释为 \" -> " 并创建无效的 JSON。 如果您从输入中读取此内容,则不需要这样做。 这只是这个例子的一个产物;不是现实世界的代码。

import groovy.json.*

def slurper = new JsonSlurper()
def json = slurper.parseText("""
   {
        "Id": "db338737-af14-ef11-9f8a-000d3aad8ef7",
        "InputParameters": [
            {
                "key": "CanonicalMessage",
                "value": "{\\"ActivityId\\":\\"9f368268\\",\\"Payload\\":{\\"CaseTitle\\":\\"Material Description 000\\",\\"CustomerAssetNumber\\":\\"104628\\"}}"
            },
            {
                   "key": "transactionlogid",
                    "value": "9f36828e9"
            }
        ]
        
    }
""")

List<String> caseTitles = json.InputParameters
   .findAll { it.key == "CanonicalMessage" }
   .collect { 
      def innerJson = slurper.parseText( it.value )
      innerJson.Payload.CaseTitle
   }

println(caseTitles)

这是可执行的并且有效。

© www.soinside.com 2019 - 2024. All rights reserved.