【问题标题】:how to parse json using groovy如何使用 groovy 解析 json
【发布时间】:2011-10-05 00:14:27
【问题描述】:

我想解析像这样进来的 JSON 数据:

{
   "212315952136472": {
      "id": "212315952136472",
      "name": "Ready",
      "picture": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/195762_212315952136472_4343686_s.jpg",
      "link": "http://www.hityashit.com/movie/ready",
      "likes": 5,
      "category": "Movie",
      "description": "Check out the reviews of Ready on  http://www.hityashit.com/movie/ready"
   }
}

我使用的代码是:

JSONElement userJson = JSON.parse(jsonResponse)
userJson.data.each {
    Urls = it.link
}

但我无法获得分配给Urls 的任何内容。有什么建议吗?

【问题讨论】:

    标签: json grails groovy


    【解决方案1】:

    您是否尝试过使用JsonSlurper

    示例用法:

    def slurper = new JsonSlurper()
    def result = slurper.parseText('{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}')
    
    assert result.person.name == "Guillaume"
    assert result.person.age == 33
    assert result.person.pets.size() == 2
    assert result.person.pets[0] == "dog"
    assert result.person.pets[1] == "cat"
    

    【讨论】:

    • 这仅适用于 Groovy 1.8 及更高版本。
    • 太棒了!您可能需要import groovy.json.JsonSlurper
    • 这不回答问题,因为问题有一个动态 id(如212315952136472)作为路径的一部分。您能否更新您的示例以使用问题的数据?谢谢!
    【解决方案2】:

    该响应是一个 Map,其中包含一个键为“212315952136472”的元素。地图中没有“数据”键。如果要遍历所有条目,请使用以下内容:

    JSONObject userJson = JSON.parse(jsonResponse)
    userJson.each { id, data -> println data.link }
    

    如果你知道它是一个单元素地图,那么你可以直接访问link

    def data = userJson.values().iterator().next()
    String link = data.link
    

    如果您知道 id(例如,如果您使用它来发出请求),那么您可以更简洁地访问该值:

    String id = '212315952136472'
    ...
    String link = userJson[id].link
    

    【讨论】:

    • Burt,我应该导入什么来使第一个示例代码块工作?我发现我需要import org.codehaus.groovy.grails.web.json.JSONObject,但它无法说明“没有这样的属性:JSON”
    • 知道了 - from here。这是import grails.converters.JSON
    【解决方案3】:

    您可以在 Groovy 中使用 as 运算符将 JSON 转换为所需的类型:

    import groovy.json.JsonSlurper
    
    String json = '''
    {
      "name": "John",  
      "age": 20
    }
    '''
    
    def person = new JsonSlurper().parseText(json) as Person 
    
    with(person) {
        assert name == 'John'
        assert age == 20
    }
    

    【讨论】:

      【解决方案4】:

      这个唯一编号的东西有点棘手。

      如果你知道这个值,那就简单了

      stage('Test Groovy JSON parsing') {
          steps {
              script {
                  def userJson = readJSON file: 'myJsonFile.json'
      
                  def keyList = userJson['212315952136472'].keySet()
                  echo "${keyList}"   // ['id', 'name', 'picture', 'link', 'likes', 'category', 'description']
                  
                  echo "${userJson['212315952136472'].name}"  // Ready
                  echo "${userJson['212315952136472'].link}"  // http://www.hityashit.com/movie/ready
              }
          }
      }
      

      如果你不知道这个数字,你可以遍历 JSON

      userJson.each { key, value ->
          echo "Walked through key $key and value $value"
      }
      

      还要查看Jenkins Read JSON from File的文档

      【讨论】:

        【解决方案5】:
        def jsonFile = new File('File Path');
        JsonSlurper jsonSlurper = new JsonSlurper();
        
        def parseJson = jsonSlurper.parse(jsonFile)
        String json = JsonOutput.toJson(parseJson)
        
        def prettyJson = JsonOutput.prettyPrint(json)
        println(prettyJson)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-30
          相关资源
          最近更新 更多