尝试使用HttpWebRequest和以下代码在线访问XML: 浏览URL时,可以看到XML,但变量数据包含以下内容: 我已经检查过webResponse.Cookies,但是它是空的。 如何使用webrequest克服这个问题,并将xml放入data变量中? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我想这是一个通用的编程问题,但是对于AJAX类型的东西,我基本上还是一个初学者。
假设我正在使用一个API,在这些API中,创建者并不在乎好好命名(或者至少不是我的方式命名),这样响应看起来像这样:
{
data: [{
sdt: '2018-10-12',
firstnm: 'Stevo',
pos: 'Assistant to the Manager'
}]
}
但我希望我的界面使用camelCase约定具有更清晰的名称,如下所示:
export interface IHiringData {
startDate: string,
firstName: string,
position: string
}
这可能吗? 还是我坚持定义一个模仿API返回值的接口? 如果可以使用所需的接口,将返回的数据映射到Typescript接口的一种好方法是什么?
一种解决方案是简单地将JSON数据映射到与您的接口匹配的新对象。
export interface IHiringData {
startDate: string
firstName: string
position: string
}
const json = {
data: [{
sdt: '2018-10-12',
firstnm: 'Stevo',
pos: 'Assistant to the Manager'
}]
}
const hiringData: IHiringData[] = json.data.map(x => ({
startDate: x.sdt,
firstName: x.firstnm,
position: x.pos
}))
另一个解决方案是使用JSON Reviver函数将某些键重新映射为更好的名称:
interface Employees {
data: Employee[];
}
interface Employee {
startDate: string;
firstName: string;
position: string;
}
const json = `{
"data": [{
"sdt": "2018-10-12",
"firstnm": "Stevo",
"pos": "Assistant to the Manager"
}]
}`
const remapKeys = {
"sdt": "startDate",
"firstnm": "firstName",
"pos": "position"
}
function reviver(this: any, key: string, val: any) {
if (key in remapKeys)
this[remapKeys[key as keyof typeof remapKeys]] = val;
else
return val;
}
const obj: Employees = JSON.parse(json, reviver);
结果:
{
data: [
{
startDate: "2018-10-12",
firstName: "Stevo",
position: "Assistant to the Manager"
}
]
}
示例: 游乐场链接
这种方法的一个可能优势是,您可以解析一棵大的JSON数据树,并且无论在何处找到键,键都将被重新映射。
对于任何解决方案,请注意JSON.parse()
返回any
并且不能保证您的映射实际上与您的接口匹配。 为了达到该安全级别,您需要编写一个完整的反序列化程序,对意外或丢失的数据引发错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.