最近我在使用groovy編寫一個程序,遇到了一個奇怪的問題,就是無法找到j(luò)son。
def json = '{"name":"Tom","age":20}' def jsonObj = new JsonSlurper().parseText(json) //這段代碼會出錯 println jsonObj.name
在使用groovy自帶的JsonSlurper類進(jìn)行json解析時,我調(diào)用了parseText()方法將json字符串解析成json對象,但是在訪問json對象的屬性時,程序拋出了異常:Cannot get property 'name' on null object。
我非常疑惑,因為json對象明明已經(jīng)被成功解析出來了,為什么訪問不到其屬性呢?
經(jīng)過一番排查,我發(fā)現(xiàn)問題出在了json的解析代碼上。在解析json字符串時,我并沒有指定解析器要使用的類庫,于是groovy就默認(rèn)使用了JDK自帶的json類庫。
import java.util.* import java.io.* import org.json.* import groovy.json.JsonSlurper def json = '{"name":"Tom","age":20}' def jsonObj = null try { jsonObj = new JSONObject(json) } catch (JSONException e) { jsonObj = new JsonSlurper().parseText(json) } //這段代碼會輸出"Tom" println jsonObj.name
為了解決問題,我更換了解析庫,使用了第三方類庫JSON-Java,然后在解析json字符串時,根據(jù)情況選擇使用不同的解析器。如果解析器拋出了異常,就換用另一個解析器來解析。
經(jīng)過這樣的修改,問題終于得以解決。