在Java中,JSON是一種常用的數據交換格式。一個JSON對象由若干個鍵值對組成,鍵名和鍵值之間用冒號分隔,鍵值和其他鍵值之間用逗號分隔,整個對象用大括號包裹起來。在某些情況下,我們可能需要在JSON對象的鍵名中使用句點(.)來表示層級關系,例如:
{ "person.name": "張三", "person.age": 20, "person.address.city": "北京", "person.address.street": "西二旗" }
如果我們使用常規的方式來讀取這個JSON對象,會出現無法正常獲取對應的鍵名的情況。
JSONObject jsonObject = new JSONObject(jsonString); String name = jsonObject.getString("person.name"); // 報錯
解決這個問題的方法是使用getJSONObject()方法來逐級獲取,示例如下:
JSONObject jsonObject = new JSONObject(jsonString); JSONObject personObject = jsonObject.getJSONObject("person"); String name = personObject.getString("name"); String city = personObject.getJSONObject("address").getString("city");
需要注意的是,在將JSON對象轉成字符串的時候,同樣需要使用逐級獲取的方式來避免出現帶點的鍵名。
JSONObject personObject = new JSONObject(); JSONObject addressObject = new JSONObject(); addressObject.put("city", "北京"); addressObject.put("street", "西二旗"); personObject.put("name", "張三"); personObject.put("age", 20); personObject.put("address", addressObject); String jsonString = personObject.toString(); // {"name":"張三","age":20,"address":{"city":"北京","street":"西二旗"}}
在使用Java操作JSON的過程中,帶點的鍵名雖然不常見,但同樣需要注意。通過逐級獲取的方式,可以避免出現因為帶點而產生的讀取或轉換錯誤。
上一篇VUE是啥啊