如何在打字稿中的现有 REST API JSON 中附加其他字段

布雷迪·马夫

我想添加原始回复中不存在的其他列。我一一调用多个 REST 端点,并将所有结果组合成单个 JSON 并显示在Angular Mat 表中我想显示这些列 -['postId', 'id', 'name', 'email', 'body', 'environment'];

我正在为除environment之外的所有列获得价值,这是我从 REST API 获得响应后想要添加的内容。

例如,当我调用 时onGetPost('post-1'),我想"environment": "dev"在现有响应中添加此字段。这是我调用此 api 时得到的原始响应 -https://jsonplaceholder.typicode.com/posts/1/comments

[
{
    "postId": 1,
    "id": 1,
    "name": "id labore ex et quam laborum",
    "email": "[email protected]",
    "body": "laudantium enim quasi"
  },
{
    "postId": 1,
    "id": 2,
    "name": "id labore ex et quam laborum",
    "email": "[email protected]",
    "body": "laudantium enim quasi"
  }
]

我想修改如下响应:

[
{
    "postId": 1,
    "id": 1,
    "name": "id labore ex et quam laborum",
    "email": "[email protected]",
    "body": "laudantium enim quasi",
     "environment": "dev"
  },
{
    "postId": 1,
    "id": 2,
    "name": "id labore ex et quam laborum",
    "email": "[email protected]",
    "body": "laudantium enim quasi",
     "environment": "dev"
  }
]

同样,当它调用时onGetPost('post-2'),这个字段应该被附加"environment": "qa"到所有项目中,onGetPost('post-3')应该是"environment": "uat"并且onGetPost('post-4')应该是"environment": "prod"

我尝试了下面的代码,但这没有按预期工作:

        if (postId == 'post-1') {
            response.forEach(obj => {
                Object.entries(obj).forEach(([key, value]) => {
                    //console.log(`${key} ${value}`);
                    this.item[key] = value;
                    this.item['environment'] = 'dev';
                });
                this.my_array.push(this.item)
            }); 
        }

请找到我的完整代码片段:

post.component.ts

import { Component, OnInit, ViewChild, ChangeDetectorRef } from '@angular/core';
import { animate, state, style, transition, trigger } from '@angular/animations';
import { MatTableDataSource } from '@angular/material/table';
import { MatPaginator } from '@angular/material/paginator';
import { MatSort, Sort } from '@angular/material/sort';
import { LiveAnnouncer } from '@angular/cdk/a11y';
import { PostService } from './post-service';
import { Post } from './post';

export class PostComponent implements OnInit {


    @ViewChild(MatPaginator) paginator: MatPaginator;
    @ViewChild(MatSort) sort: MatSort;

    post: Post[];
    dataSource;
    columnsToDisplay = ['postId', 'id', 'name', 'email', 'body', 'environment'];
    my_array = [];
    item = {};

    /**
     * Constructor
     */
    constructor(
        private postService: PostService,
        private _liveAnnouncer: LiveAnnouncer,
        private cdr: ChangeDetectorRef) { }

    listPost() {
        this.onGetPost('post-1');
        this.onGetPost('post-2');
        this.onGetPost('post-3');
        this.onGetPost('post-4');
    }

    onGetPost(postId): void {
        this.postService.getPost(postId).subscribe(
            (response) => {
                console.log(response);
                this.my_array.push(...response)
            if (postId == 'post-1') {
                response.forEach(obj => {
                    Object.entries(obj).forEach(([key, value]) => {
                        //console.log(`${key} ${value}`);
                        this.item[key] = value;
                        this.item['environment'] = 'dev';
                    });
                    this.my_array.push(this.item)
                }); 
            }
                this.dataSource = new MatTableDataSource(this.my_array.push);
                this.cdr.detectChanges();
                this.dataSource.paginator = this.paginator;
                this.dataSource.sort = this.sort;
            },
            (error: any) => {
                console.log('entering into error block')
                console.log(error)
                this.dataSource = new MatTableDataSource();
                this.cdr.detectChanges();
                this.dataSource.paginator = this.paginator;
                this.dataSource.sort = this.sort;

            },
            () => console.log('Done getting all post')
        );
    }

    filterData($event: any) {
        this.dataSource.filter = $event.target.value;
    }
    announceSortChange(sortState: Sort) {
        if (sortState.direction) {
            this._liveAnnouncer.announce(`Sorted ${sortState.direction}ending`);
        } else {
            this._liveAnnouncer.announce('Sorting cleared');
        }
    }

    /**
     * On init
     */
    ngOnInit(): void {
        this.listPost();

    }

}

post-service.ts

import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Observable } from "rxjs";
import { Post } from "./post";

@Injectable({ providedIn: 'root' })
export class PostService {

    constructor(private http: HttpClient) { }
    endpoint: any;
    getPost(id): Observable<Post[]> {

        console.log(id);
        switch (id) {
            case 'post-1':
                this.endpoint = 'https://jsonplaceholder.typicode.com/posts/1/comments';
                break;
            case 'post-2':
                this.endpoint = 'https://jsonplaceholder.typicode.com/posts/2/comments';
                break;
            case 'post-3':
                this.endpoint = 'https://jsonplaceholder.typicode.com/posts/3/comments';
                break;
            case 'post-4':
                this.endpoint = 'https://jsonplaceholder.typicode.com/posts/4/comments';
                break;
        }
        return this.http.get<Post[]>(this.endpoint);
    }
}

你能帮我解决这个问题吗?感谢您对此的支持。谢谢!

最终输出应如下所示:

[
    {
        "postId": 1,
        "id": 1,
        "name": "id labore ex et quam laborum",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "dev"
    },
    {
        "postId": 1,
        "id": 2,
        "name": "quo vero reiciendis velit similique earum",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "dev"
    },
    {
        "postId": 1,
        "id": 3,
        "name": "odio adipisci rerum aut animi",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "dev"
    },
    {
        "postId": 2,
        "id": 6,
        "name": "et fugit eligendi deleniti quidem qui sint nihil autem",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "qa"
    },
    {
        "postId": 2,
        "id": 7,
        "name": "repellat consequatur praesentium vel minus molestias voluptatum",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "qa"
    },
    {
        "postId": 2,
        "id": 8,
        "name": "et omnis dolorem",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "qa"
    },
    {
        "postId": 3,
        "id": 9,
        "name": "provident id voluptas",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "uat"
    },
    {
        "postId": 4,
        "id": 10,
        "name": "eaque et deleniti atque tenetur ut quo ut",
        "email": "[email protected]",
        "body": "laudantium enim quasi est",
        "environment": "prod"
    }
]
帕迪普

您好所有您需要使用javascript map函数来修改对象数组

const ob = [
{
   "postId": 1,
   "id": 1,
   "name": "id labore ex et quam laborum",
   "email": "[email protected]",
   "body": "laudantium enim quasi"
},
{
   "postId": 1,
   "id": 2,
   "name": "id labore ex et quam laborum",
   "email": "[email protected]",
   "body": "laudantium enim quasi"
}
]
const mapped = ob.map((i)=> {
    i['environment'] = "dev" // add your condition for qa/dev etc (post == 1) ? dev : qa etc
    return i;
});
console.log(mapped)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在打字稿中公开API返回的类型

如何在打字稿中转换JSON数据数组中的JSON数据?

如何在打字稿中为现有类型添加属性?

如何在打字稿中从JSON进行转换时获取正确的类?

如何在REST API中从Json数组获取JSON对象

在打字稿中调用rest API时,面临错误,因为“'this'隐式具有'any'类型,因为它没有类型注释”

如何在Django中构建JSON REST API(没有Django REST框架)

REST API:响应JSON中的对象列表中的对象字段

如何在打字稿中调用自有函数

AMBARI + 如何在 json REST API 中设置值

在 Django REST API 中命名 JSON 数组

Spring REST API中的Json模式验证

XML和JSON中的Django REST API

使用JSON在python中创建Rest Api?

在打字稿中向现有类添加方法?

从Kubernetes中的其他命名空间调用Rest API

如何将Firebase REST API响应转换为打字稿中的数组?

在Django REST Framework中的POST中接受其他字段

如何从 Rest API 访问 json

rails:如何在json响应中包括其他字段

如何在Django Rest Framework中序列化API响应(以JSON格式)以及修改字段并向其中添加字段?

如何从 JSON REST-API 在 jQuery 中显示特定变量?

如何从 Express REST API 查询 Postgres 表中的 JSON

Plone REST API:如何使用json清除日期时间字段?

在打字稿中删除 JSON 对象数组中的属性

如何创建一个在打字稿中返回布尔值的API?

如何在angular2 [打字稿]中定义具有复杂json结构的模型?

在打字稿中检查API响应的类型

如何在打字稿中理解“属性'名称'在类型'用户'中是私有的”