[英]Parse complete json file typescript
I want to view and edit a JSON file in typescript/Angular 2. But i can't read childs 我想在Typescript / Angular 2中查看和编辑JSON文件。但是我看不懂childs
My JSON looks like this : 我的JSON看起来像这样:
{
"site": {
"listing":{
"nbpage":10,
"lengthcorps":320
},
"detail":{
"sim":{
"active":true,
"nb":10
}
},
"tri":{
"default": {
"type":"item",
"sens":"item"
},
"options": ["options1","options2"]
},
"cc": {
"nb": 0,
"active":1
},
"hasreferencement":false
}
}
I have my interfaces 我有我的界面
export interface site {
model: string;
listing:listing;
detail:detail;
contact:contact;
tri:tri;
cc:cc;
hasselection?:boolean;
hasreferencement?:boolean;
}
export interface listing {
nbpage?:number;
type?:number;
lengthcorps?:number;
}
export interface detail {
type?:number;
sim?:sim;
lengthcoprs?:number;
gallery?:boolean;
}
export interface tri {
default?:defaulttri;
options?:string[];
}
export interface cc {
nb?:number;
active?:number;
}
export interface sim{
active?:boolean;
nb?:number;
}
export interface defaulttri{
type?:string;
sens?:string;
}
All is working well, but now i want print/modify all attributes on my template And it's here my little problem 一切工作正常,但是现在我想打印/修改模板上的所有属性,这是我的小问题
<ul *ngFor="let item of uploadFile.site | JsonPipe3; let i=index">
<li>{{ item.key }} => {{item.value }}</li>
</ul>
export class JsonPipe3 implements PipeTransform {
transform(value, args:string[]) : any {
let keys = [];
let keys2 =[];
for (let key in value) {
keys.push({key: key, value: value[key]});
/*
if(this.isAnyObject(value[key])){
for (let key2 in value[key]) {
keys2.push({key: key2, value:value[key2]});
}
}
*/
}
//return [keys,keys2];
return keys;
}
isAnyObject(value) {
return value != null && (typeof value === 'object' || typeof value === 'function');
}
}
I can read only the first child of an attribute like ""hasreferencement":false" else i have [Object Object] On my pipe i tried a test if object exist on the second child but it's not working correctly and if I have a third child i can only read the second with this idea 我只能读取属性的第一个子级,例如““ hasreferencement”:false“,否则我有[Object Object]在我的管道上,我尝试测试第二个子级是否存在对象,但它不能正常工作,如果我有第三个子级孩子,我只能用这个想法读第二篇
I hope someone can help me ^^ Thanks 我希望有人可以帮助我^^谢谢
You're getting [Object Object]
because angular calls toString()
on each value you bind to the view, and toString()
of an object is JS returns [Object Object]
(if not overridden). 之所以得到
[Object Object]
是因为对绑定到视图的每个值进行toString()
角调用,而对象的toString()
是JS,则返回[Object Object]
(如果未重写)。
Your commented if is almost correct, try this one 您的评论是否几乎正确,请尝试此
transform(value, args:string[]) : any {
let keys = [];
let keys2 =[];
for (let key in value) {
if(this.isAnyObject(value[key])){
for (let key2 in value[key]) {
keys2.push({key: key2, value:value[key][key2]});// <-- instead of value:value[key2]
}
} else {
keys.push({key: key, value: value[key]});
}
}
return keys.concat(keys2); // <-- instead of [keys, keys2]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.