如何在Kotlin中从给定JSON字符串获取属性名列表
在Kotlin中提取JSON字符串的所有属性名列表
方法一:使用Java标准库的org.json(无需额外依赖)
Android项目默认包含该库,JVM项目可手动引入依赖,实现代码如下:
import org.json.JSONObject fun main() { val jsonString = """ { "id": 2, "title": "iPhone X", "description": "SIM-Free, Model A19211 6.5-inch Super Retina HD display with OLED technology A12 Bionic chip with ...", "price": 899, "discountPercentage": 17.94, "rating": 4.44, "stock": 34, "brand": "Apple", "category": "smartphones", "thumbnail": "https://i.dummyjson.com/data/products/2/thumbnail.jpg", "images": [ "https://i.dummyjson.com/data/products/2/1.jpg", "https://i.dummyjson.com/data/products/2/2.jpg", "https://i.dummyjson.com/data/products/2/3.jpg", "https://i.dummyjson.com/data/products/2/thumbnail.jpg" ] } """.trimIndent() val jsonObject = JSONObject(jsonString) val propertyNames = jsonObject.keys().asSequence().toList() println(propertyNames) }
方法二:使用Gson库
若项目用Gson处理JSON,可通过JsonObject直接获取属性名:
import com.google.gson.JsonParser fun main() { val jsonString = """ { "id": 2, "title": "iPhone X", "description": "SIM-Free, Model A19211 6.5-inch Super Retina HD display with OLED technology A12 Bionic chip with ...", "price": 899, "discountPercentage": 17.94, "rating": 4.44, "stock": 34, "brand": "Apple", "category": "smartphones", "thumbnail": "https://i.dummyjson.com/data/products/2/thumbnail.jpg", "images": [ "https://i.dummyjson.com/data/products/2/1.jpg", "https://i.dummyjson.com/data/products/2/2.jpg", "https://i.dummyjson.com/data/products/2/3.jpg", "https://i.dummyjson.com/data/products/2/thumbnail.jpg" ] } """.trimIndent() val jsonObject = JsonParser.parseString(jsonString).asJsonObject val propertyNames = jsonObject.keySet().toList() println(propertyNames) }
方法三:使用Jackson库
对于依赖Jackson的项目,通过JsonNode提取属性名:
import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.ObjectMapper fun main() { val jsonString = """ { "id": 2, "title": "iPhone X", "description": "SIM-Free, Model A19211 6.5-inch Super Retina HD display with OLED technology A12 Bionic chip with ...", "price": 899, "discountPercentage": 17.94, "rating": 4.44, "stock": 34, "brand": "Apple", "category": "smartphones", "thumbnail": "https://i.dummyjson.com/data/products/2/thumbnail.jpg", "images": [ "https://i.dummyjson.com/data/products/2/1.jpg", "https://i.dummyjson.com/data/products/2/2.jpg", "https://i.dummyjson.com/data/products/2/3.jpg", "https://i.dummyjson.com/data/products/2/thumbnail.jpg" ] } """.trimIndent() val objectMapper = ObjectMapper() val jsonNode: JsonNode = objectMapper.readTree(jsonString) val propertyNames = jsonNode.fieldNames().asSequence().toList() println(propertyNames) }
以上三种方法最终都会输出期望的结果:
[id, title, description, price, discountPercentage, rating, stock, brand, category, thumbnail, images]
内容的提问来源于stack exchange,提问作者Al Masud
相关产品推荐
相关产品推荐

