这是我从后端获得结果的代码:
private extractTrains(res: Response){
let body = res.json();
let trains = body['List of vehicles'];
return trains;
}
我如何得到每个结果元素(所以像train [5] ['Latitude']一样有效)而不是每个结果元素(比如train [5] [7]返回一个char,而不是我想要的?)< / p>
另一个编辑: 正如https://stackoverflow.com/a/43959884/1144431所建议的,我现在有常规字符串作为数组的每个元素,在字符串中有双引号。现在我必须将这些双引号转换为JSON的单引号,对吧?
答案 0 :(得分:0)
扩展Pengyy的答案,通常当我做这样的事情时,我实现了一个MyClass.fromJson(res)方法,该方法将主体解析为一个MyClass对象,该对象很容易在模板和Api服务中使用。
想想这样的事情
export class Train {
TripID:number;
Direction:number;
time:number;
etc...
static fromJson(json: any): Train {
return Object.assign(this.placeholder(), json)
}
public static placeholder(): Train {
let p = new Train();
p.TripID = -1;
p.Direction = -1;
p.time = -1;
etc...
return p;
}
}
然后你会将Array<Train>
传递给* ngFor并使用点符号。
所以在你的情况下你可以这样做(假设res包含一个[array]
的火车jsons)
private extractTrains(res: Response): Array<Train> {
return res.json().map(json => Train.fromJson(json));
}
您的评论澄清了这只是一个解析错误,因此您可以重新格式化JSON以正确解析。
var weirdlyFormattedJson = '"{\'hello\':\'world\'}"'
var fixed = weirdlyFormattedJson.split('')
.filter(x => {return x!='"'})
.map(x => {return (x=="'") ? '"' : x}).join("");
var parsedJson = JSON.parse(fixed);
请注意,如果某个地方的json属性中实际存在"
,则会失败。你最好的选择可能是删除每个项目中的第一个和最后一个字符,如果是这样你可以这样做
var fixedJson = badJson.slice(1, -1).split('')
.map(x => {return (x=="'") ? '"' : x}).join("");
请注意,如果属性中有'
,这也会失败。
您可能实际上必须创建一个转换器来跟踪:
的位置,并且只替换包装每个键和值的'
。
这里有一个小的演示,尽管你必须使用递归来实现真正的实现
https://jsfiddle.net/b60Ladbr/
原因是任何嵌套对象{}
都无法正确解析,因此如果您遇到{
作为每个:
分隔数组的第二个数组项的第一个字符,那么''我必须将所有内容从{
提取到}
并将其传回fixJson