尝试将以下json转换为列表数据对象:
[
{
"type": "PHOTO",
"id": "pic1",
"title": "Photo 1",
"dataMap": {}
},
{
"type": "SINGLE_CHOICE",
"id": "choice1",
"title": "Photo 1 choice",
"dataMap": {
"options": [
"Good",
"OK",
"Bad"
]
}
},
---
---
]
代码:
data class User(val type: String, val id: String, val title: String, val options: List<Options>)
data class Options(val dataMap: String)
fun getUserListFromAssert(context: Context, fileName: String) : List<User>{
val gson = Gson()
val listPersonType = object : TypeToken<List<User>>() {}.type
var users: List<User> = gson.fromJson(getJsonDataFromAsset(context, fileName), listPersonType)
return users;
}
现在调用getUserListFromAssert:
var users: List<User> = TemporaryData.getUserListFromAssert(this, "users.json")
users.forEach { s -> Log.d(TAG, "onCreate: $s") }
输出:
User(type=PHOTO, id=pic1, title=Photo 1, options=null)
---
我无法从json获取选项列表。
我尝试了以下代码,并且能够在dataMap内检索选项。 是否可以直接在用户类中检索选项列表?
data class User(val type: String, val id: String, val title: String, @SerializedName("dataMap") val options: dataMap)
data class dataMap(val options: List<String>)
输出:
User(type=PHOTO, id=pic1, title=Photo 1, options=dataMap(options=null))
User(type=SINGLE_CHOICE, id=choice1, title=Photo 1 choice, options=dataMap(options=[Good, OK, Bad]))
答案 0 :(得分:1)
默认情况下,您的variable name
将引用您的JSON key
。因此,您可以尝试以下方法:
data class User(val type: String, val id: String, val title: String, val dataMap: List<Options>)
但是,如果您仍然想要options
作为变量名。您可以使用@SerializedName
:
data class User(val type: String, val id: String, val title: String, @SerializedName("dataMap") val options: List<Options>)
答案 1 :(得分:0)
选项应为字符串列表。
data class Options(val dataMap: List<String>)
答案 2 :(得分:0)
您可以尝试
val jsonObject = JSONObject(<your JSON string result>);
val jsonArray = jsonObject.getJSONArray();
//use GSON to parse
if (jsonArray != null) {
val gson = Gson();
val objResponse = gson.fromJson(jsonArray.toString(), ObjResponse[]::class.java);
val objResponseList = Arrays.asList(objResponse);
}