无法正确映射 json 到数据模型
unable to correctly map json to data model
我想将以下信息建模到 json
但我做不到。
服务器使用以下模型向客户端发送操作结果
class Result (result:string, additional-info:string)
additional-info
可能包含 json
或 string
,具体取决于用例。因此它的类型是String
。当我需要在其中发送 json
时,我只需发送一个具有有效 json
语法的字符串,我想 Angular
客户端将能够将该字符串转换为 json
使用 JSON.parse
.
我要发给客户端的json
长这样
{
"result": "success",
"additional-info": {
"list ": [{
"tag": "sometag",
"description": "some description"
}]
}
}
我检查了 jsonlint (https://jsonlint.com/) 结构是否正确。
在客户端(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
之后,我看到 result
是 success
但是additional-info
未定义。
在res.body
中,javascript创建一个对象
{
"result": "success",
"additional-info": {
"list ": [{
"tag": "sometag",
"description": "some description"
}]
}
}
该对象有两个键 - result
和 additional-info
。让我们称之为 Object1
我将它分配给一个具有键 result
和 additionalInfo
的对象。请注意 additionalInfo
中命名约定的差异。在javascript中,变量名是区分大小写的,所以上面两个是不同的。让我们称之为 object2
现在 object1
的 result
被分配给 object2
的 result
因为键匹配(同名 result
)
additional-info
成为 object2
中的新密钥
object2
的 additionalInfo
键保持未定义,因为 object1
中没有键映射到 additionalInfo
为了解决这个问题,我必须创建一个 additional-info
密钥 ServerResponseAPI
(或者我也可以将我的 JSON 属性 名称更改为 additionalInfo
但我不想改变它)。这是在 Angular 中完成的
export class ServerResponseAPI{
'additional-info':string;
constructor ( public result:string,
public additionalInformation:string){
this['additional-info'] = additionalInformation;
}
}
在我的代码中,我现在访问密钥为
let jsonResponse:ServerResponseAPI = res.body //contains result and additional info
console.log("result: "+jsonResponse.result+", additional info:"+jsonResponse['additional-info'])
let jsonQuestionList:string = jsonResponse['additional-info']
我想将以下信息建模到 json
但我做不到。
服务器使用以下模型向客户端发送操作结果
class Result (result:string, additional-info:string)
additional-info
可能包含 json
或 string
,具体取决于用例。因此它的类型是String
。当我需要在其中发送 json
时,我只需发送一个具有有效 json
语法的字符串,我想 Angular
客户端将能够将该字符串转换为 json
使用 JSON.parse
.
我要发给客户端的json
长这样
{
"result": "success",
"additional-info": {
"list ": [{
"tag": "sometag",
"description": "some description"
}]
}
}
我检查了 jsonlint (https://jsonlint.com/) 结构是否正确。
在客户端(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
之后,我看到 result
是 success
但是additional-info
未定义。
在res.body
中,javascript创建一个对象
{
"result": "success",
"additional-info": {
"list ": [{
"tag": "sometag",
"description": "some description"
}]
}
}
该对象有两个键 - result
和 additional-info
。让我们称之为 Object1
我将它分配给一个具有键 result
和 additionalInfo
的对象。请注意 additionalInfo
中命名约定的差异。在javascript中,变量名是区分大小写的,所以上面两个是不同的。让我们称之为 object2
现在 object1
的 result
被分配给 object2
的 result
因为键匹配(同名 result
)
additional-info
成为 object2
中的新密钥
object2
的 additionalInfo
键保持未定义,因为 object1
中没有键映射到 additionalInfo
为了解决这个问题,我必须创建一个 additional-info
密钥 ServerResponseAPI
(或者我也可以将我的 JSON 属性 名称更改为 additionalInfo
但我不想改变它)。这是在 Angular 中完成的
export class ServerResponseAPI{
'additional-info':string;
constructor ( public result:string,
public additionalInformation:string){
this['additional-info'] = additionalInformation;
}
}
在我的代码中,我现在访问密钥为
let jsonResponse:ServerResponseAPI = res.body //contains result and additional info
console.log("result: "+jsonResponse.result+", additional info:"+jsonResponse['additional-info'])
let jsonQuestionList:string = jsonResponse['additional-info']