我想将以下信息建模到public void resetDate(myDatePicker){
Calendar now = Calendar.getInstance();
this.myDatePicker.updateDate(
now.get(now.YEAR),
now.get(now.MONTH),
now.get(now.DAY_OF_MONTH)
);
}
中,但无法这样做。
服务器使用以下模型将操作结果发送到客户端
json
class Result (result:string, additional-info:string)
可以包含additional-info
或json
,具体取决于用例。因此,其类型为string
。当我需要在其中发送String
时,我只发送了一个带有有效json
语法的字符串,并且我想json
客户端将能够将该字符串转换为{{ 1}}使用Angular
。
我要发送给客户端的json
看起来像
JSON.parse
我检查了jsonlint(https://jsonlint.com/)的结构是否正确。
在客户端(json
)上,我将消息发送如下:
{
"result": "success",
"additional-info": {
"list ": [{
"tag": "sometag",
"description": "some description"
}]
}
}
Angular
定义为
getQuestions(some args){
console.log('response from server:',res)
console.log('response body',res.body)
let jsonResponse:ServerResponseAPI = res.body //should contain result and additional info
console.log("result: "+jsonResponse.result+", additional info:"+jsonResponse.additionalInformation)
let jsonList:string = jsonResponse.additionalInformation
console.log("jsonQuestionList: "+jsonList)
let information:Information = JSON.parse(jsonList)
console.log("information:"+information)
});
}
执行代码时,我在浏览器的控制台上看到以下打印内容,但是看到未定义ServerResponseAPI
的错误。
export class ServerResponseAPI{
constructor ( public result:string,
public additionalInformation:string){}
}
我可以看到主体包含additional-info
和response body {result: "success", additional-info: "{"list ": [{"tag": "sometag", "description": "some description"}]}"}
list-management.service.ts:46 result: success, additional info:undefined
,但是将主体投射到result
之后,我看到additional-info
是ServerResponseAPI
但{{ 1}}未定义。
答案 0 :(得分:1)
在res.body
中,javascript创建了一个对象
{
"result": "success",
"additional-info": {
"list ": [{
"tag": "sometag",
"description": "some description"
}]
}
}
对象具有两个键-result
和additional-info
。让我们称之为Object1
我将其分配给具有键result
和additionalInfo
的对象。请注意additionalInfo
中命名约定的不同。在javascript中,变量名称区分大小写,因此以上两个是不同的。让我们称之为object2
现在result
中的object1
被分配给result
中的object2
,因为键匹配(名称result
)
additional-info
成为object2
中的新密钥
additionalInfo
的{{1}}键保持未定义状态,因为object2
中没有键映射到object1
要解决此问题,我必须创建一个additionalInfo
密钥additional-info
(或者,我也可以将JSON属性名称更改为ServerResponseAPI
,但我不想更改该名称)。这是在Angular中完成的,
additionalInfo
在我的代码中,我现在以以下方式访问键
export class ServerResponseAPI{
'additional-info':string;
constructor ( public result:string,
public additionalInformation:string){
this['additional-info'] = additionalInformation;
}
}