代码之家  ›  专栏  ›  技术社区  ›  Teddy

groovy从字符串中提取值

  •  0
  • Teddy  · 技术社区  · 6 年前

    我从服务器响应中获得一个字符串:

    responseString:"{"session":"vvSbMInXHRJuZQ==","age":7200,"prid":"901Vjmx9qenYKw","userid":"user_1"}"
    

    然后我会:

    responseString[1..-2].tokenize(',')
    

    得到了:

    [""session":"vvSbMInXHRJuZQ=="", ""age":7200", ""prid":"901Vjmx9qenYKw"", ""userid":"user_1""]
    

    获取(3)获取:

    ""userid":"user_1""
    

    我需要的是user\u 1,我是否真的可以得到它?我一直被困在这里,其他json方法也得到类似的结果,如何删除外部“”?

    谢谢

    2 回复  |  直到 6 年前
        1
  •  2
  •   Michael Easter    6 年前

    如果从 responseStr ,则可以使用 JsonSlurper ,如下所示:

    def s = 'responseString:"{"session":"vvSbMInXHRJuZQ==","age":7200,"prid":"901Vjmx9qenYKw","userid":"user_1"}"'
    
    def matcher = (s =~ /responseString:"(.*)"/)
    assert matcher.matches()
    def responseStr = matcher[0][1]
    
    import groovy.json.JsonSlurper
    def jsonSlurper = new JsonSlurper()
    def json = jsonSlurper.parseText(responseStr)
    assert "user_1" ==  json.userid
    
        2
  •  0
  •   Gaurav Khurana    6 年前

    此代码可以帮助您获得用户ID。

    def str= 'responseString:"{:"session":"vvSbMInXHRJuZQ==","age":7200,"prid":"901Vjmx9qenYKw","userid":"user_1","hdkshfsd":"sdfsdfsdf"}'
    def match = (str=~ /"userid":"(.*?)"/)
    log.info match[0][1]
    

    此模式可以帮助您从字符串中获取所需的任何值。尝试用年龄替换userid,您将得到

    def match = (str=~ /"age":"(.*?)"/)
    

    @Michael代码也正确。只是您已经澄清,您希望用户名是特定的