HarmonyOS鸿蒙Next中接口返回的json数据中存在短横线字段名称如何正确映射到interface数据类

HarmonyOS鸿蒙Next中接口返回的json数据中存在短横线字段名称如何正确映射到interface数据类

接口返回的数据中有字段名中有短横线-,在应用中定义interface用来接收返回数据时字段名没法使用短横线导致接口返回的数据无法映射,有没有什么办法可以让数据能够正确映射?


更多关于HarmonyOS鸿蒙Next中接口返回的json数据中存在短横线字段名称如何正确映射到interface数据类的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

找到解决办法了,在官方文档的编译常见问题中有该问题的解决方法:

当需要动态获取对象属性时使用Reflect.get(目标对象,属性名)进行获取,在属性名存在特殊字符时该方法也适用。

如果直接使用obj[“属性名”]语法检测无法通过,会警告“Indexed access is not supported for fields (arkts-no-props-by-index) <ArkTSCheck>”。

更多关于HarmonyOS鸿蒙Next中接口返回的json数据中存在短横线字段名称如何正确映射到interface数据类的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你的代码是对的呀。用引号引起来就行,访问的时候用 [] 方括号访问即可。

obj.id 访问普通属性
obj['file-count'] 访问带-的属性,注意 `[]` 前面没有点

感谢,找到解决方法了,使用Reflect.get就可以解决了,

在HarmonyOS鸿蒙Next中,当接口返回的JSON数据中存在短横线字段名称时,可以通过使用@SerializedName注解来实现字段名称的正确映射。@SerializedName是Gson库提供的注解,用于指定JSON字段与Java/Kotlin字段之间的映射关系。

假设JSON数据如下:

{
    "user-name": "JohnDoe",
    "user-age": 30
}

你可以在定义Interface数据类时,使用@SerializedName注解来映射带有短横线的字段名称:

import com.google.gson.annotations.SerializedName

data class User(
    @SerializedName("user-name") val userName: String,
    @SerializedName("user-age") val userAge: Int
)

这样,当使用Gson进行反序列化时,user-name字段会自动映射到userName属性,user-age字段会自动映射到userAge属性。

如果你使用的是HarmonyOS自带的JSON解析工具(如JsonObjectJsonArray),可以通过手动解析并赋值的方式来实现映射:

val jsonString = """{"user-name": "JohnDoe", "user-age": 30}"""
val jsonObject = JsonObject(jsonString)

val user = User(
    userName = jsonObject.getString("user-name"),
    userAge = jsonObject.getInt("user-age")
)

这种方式需要手动处理每个字段的映射,适用于不使用Gson的情况。

总结来说,@SerializedName注解是处理JSON字段名称与数据类字段名称不一致的常用方法,特别是在字段名称包含短横线等特殊字符时。

在HarmonyOS鸿蒙Next中,如果JSON数据中的字段名称包含短横线(如user-name),可以通过使用@SerializedName注解来正确映射到Kotlin或Java数据类。例如:

data class User(
    @SerializedName("user-name") val userName: String,
    @SerializedName("user-age") val userAge: Int
)

这样,JSON中的user-name字段会自动映射到数据类中的userName属性。确保使用的JSON解析库(如Gson)支持该注解。

回到顶部