2014-09-10 24 views
5

Aşağıdakine benzer yapılandırılmış bir JSON belgesine sahibim ve bunu Groovy'de ayrıştırmaya çalışıyorum. Temel olarak her bir Okul için (Okul Bilgisi), SCHOOL_COUNTRY ve diğer alanları kapmak istiyorum. Bu kodu aşağıda deniyorum ama ihtiyacım olanı geri getirmiyor. Listelenen her okula (1.000) 'ın, ben mesela sadece belirli kısımlarını kapmak istiyorum:Groovy - JsonSlurper Ayrıştırma JSON dosyası

def parseJSON(long id) { 

    JSONFile fileInstance = JSONFile.get(id) 
    def json = new JsonSlurper().setType(RELAX).parse(new FileReader(fileInstance.filePath)) 
    def schoolInfo = json.SCHOOL_INFO 
    def schoolName = json.SCHOOL_INFO.SCHOOL_NAME 
    schoolInfo.each { 
     render(schoolInfo.SCHOOL_NAME) 
    } 
} 

Yani temelde her okul için, sadece okulun adının çıktısını. JSON yapısı:

[{ 
    "SCHOOL_INFO": { 
     "SCHOOL_COUNTRY": "Finland", 
     "SCHOOL NAME": "Findland Higher Learning"    
    }, 
    "LOCATION": {     
     "LONGITUDE": "24.999",     
     "LATITUDE": "61.001" 
    } 
}] 

cevap

8

Ben sadece böcek olmadığından emin değilim ama each yılında schoolInfo.SCHOOL_NAME okuyamaz. SCHOOL_NAME, json.SCHOOL_INFO özelliğine sahiptir ve bu nedenle it.SCHOOL_NAME, buna erişmek için uygun bir yoldur.

import groovy.json.JsonSlurper 

def jsonAsText = '''[{ 
    "SCHOOL_INFO": { 
     "SCHOOL_COUNTRY": "Finland", 
     "SCHOOL NAME": "Findland Higher Learning"    
    }, 
    "LOCATION": {     
     "LONGITUDE": "24.999",     
     "LATITUDE": "61.001" 
    } 
}]''' 

def json = new JsonSlurper().parseText(jsonAsText) 

def schoolInfo= json.SCHOOL_INFO 
schoolInfo.each{ 
    println it."SCHOOL NAME" 
} 

O yazdırır:

İşte
Findland Higher Learning 
2

Sen git:

import groovy.json.JsonSlurper 

def t = """[{ 
    "SCHOOL_INFO": { 
     "SCHOOL_COUNTRY": "Finland", 
     "SCHOOL NAME": "Findland Higher Learning"    
    }, 
    "LOCATION": {     
     "LONGITUDE": "24.999",     
     "LATITUDE": "61.001" 
    } 
}]""" 

def slurper = new JsonSlurper().parseText(t) 
slurper.each { 
    println it.SCHOOL_INFO."SCHOOL NAME" 
} 

_ işareti içinde OKUL ADI olması gerektiğinden emin değilim aşağıda örneği inceleyelim çekeriz .

1
println it.SCHOOL_INFO."SCHOOL NAME" 

Bu, _ işareti olmadan çalışmalıdır.