HarmonyOS鸿蒙Next中网络返回JSON数据在本地如何定义适配的数据模型
HarmonyOS鸿蒙Next中网络返回JSON数据在本地如何定义适配的数据模型
数据模型类:
export interface IHistoryList{
title:string
lsDate:string
}
export class CHistory {
code: number //成功代码200
msg: string //成功success
data: Array<IHistoryList>
//构造函数
constructor(
code: number //成功代码200
, msg: string //成功success
, data: Array<IHistoryList>
) {
this.code = code
this.msg = msg
this.data = data
}
}
网络获取数据代码如下:
let httpRequest = http.createHttp()
//console.log('MyTag string=',Constant.historyAPI+selectDate)
httpRequest.request(Constant.historyAPI, {
method: http.RequestMethod.GET,
//header: {},
//expectDataType:http.HttpDataType.OBJECT,
readTimeout: 6000,
connectTimeout: 6000,
}, (
err: BusinessError, data: http.HttpResponse
) => {
if (!err) {
//获取数据成功
console.info('MyTag 申请数据成功。history data=',JSON.stringify(data.result))
this.history=JSON.parse(data.result.toString()) as CHistory
console.info('MyTag history.code=',this.history.code)
console.info('MyTag history.code=',this.history.msg)
//console.info('MyTag history.code=',this.history.data)
//console.info('MyTag history.code=',this.history.code)
//销毁,释放资源
httpRequest.destroy()
} else {
//获取数据失败
console.info('MyTag 获取数据失败,', JSON.stringify(err))
//销毁,释放资源
httpRequest.destroy()
}
})
通过网络获取到数据,结果如下:
11-17 08:53:23.398 3948-11092 A0c0d0/JSAPP I MyTag 申请数据成功。data= "{\"code\":200,\"msg\":\"success\",\"data\":{\"list\":[{\"title\":\"《我是谁\",\"lsdate\":\"1085-01-01\"},{\"title\":\"草原\",\"lsdate\":\"1863-01-01\"}}]}"
在转换使用时出现如下错误:
11-17 08:53:23.417 3948-11092 C03f00/ArkCompiler E [ArkRuntime Log] TypeError: is not callable
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log]Lifetime: 0.000000s
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log]Js-Engine: ark
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log]page: pages/Index.js
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log]Error message: is not callable
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log]Stacktrace:
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at forEachUpdateFunction (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:4339:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at anonymous (entry|entry|1.0.0|src/main/ets/pages/Index.ts:311:25)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at updateFunc (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6776:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at observeComponentCreation2 (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6817:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at anonymous (entry|entry|1.0.0|src/main/ets/pages/Index.ts:271:21)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at ifElseBranchUpdateFunction (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:4286:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at anonymous (entry|entry|1.0.0|src/main/ets/pages/Index.ts:270:17)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at updateFunc (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6776:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at UpdateElement (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6496:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at anonymous (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6719:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at updateDirtyElements (/mnt/disk/workspace/jenkins_cd_pool_high_001/harmony/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:6714:1)
11-17 08:53:23.418 3948-11092 C03900/Ace E [Engine Log] at rerender (entry|entry|1.0.0|src/main/ets/pages/Index.ts:328:9)
请问如何定义数据模型类才能与返回的数据匹配?
更多关于HarmonyOS鸿蒙Next中网络返回JSON数据在本地如何定义适配的数据模型的实战教程也可以访问 https://www.itying.com/category-93-b0.html
this.history=JSON.parse(JSON.stringify(data.result)) as CHistory
这里不要用data.result.toString()
,使用JSON.stringify(data.result)
就可以了
更多关于HarmonyOS鸿蒙Next中网络返回JSON数据在本地如何定义适配的数据模型的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,网络返回的JSON数据可以通过定义适配的数据模型进行解析。数据模型通常使用TypeScript或JavaScript的类或接口来定义。假设网络返回的JSON数据如下:
{
"id": 1,
"name": "HarmonyOS",
"version": "Next"
}
你可以定义一个对应的数据模型类:
class AppInfo {
id: number;
name: string;
version: string;
constructor(id: number, name: string, version: string) {
this.id = id;
this.name = name;
this.version = version;
}
}
或者使用接口来定义:
interface AppInfo {
id: number;
name: string;
version: string;
}
在接收到网络返回的JSON数据后,可以通过以下方式将其映射到定义的数据模型:
let jsonData = '{"id": 1, "name": "HarmonyOS", "version": "Next"}';
let parsedData = JSON.parse(jsonData);
let appInfo: AppInfo = {
id: parsedData.id,
name: parsedData.name,
version: parsedData.version
};
这样,appInfo
对象就包含了JSON数据中的内容,并且类型安全地映射到了定义的数据模型。
在HarmonyOS鸿蒙Next中,网络返回的JSON数据可以通过定义数据类(Data Class)来适配。首先,根据JSON结构创建对应的Kotlin数据类,使用@Serializable
注解标记该类。然后,使用Json.decodeFromString
方法将JSON字符串反序列化为数据类对象。例如:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class User(val id: Int, val name: String)
fun main() {
val json = """{"id": 1, "name": "Alice"}"""
val user = Json.decodeFromString<User>(json)
println(user)
}
这样,JSON数据就能与本地数据模型匹配,方便后续操作。