Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将json值转换为枚举值_Json_Angular_Typescript_Serialization_Enums - Fatal编程技术网

将json值转换为枚举值

将json值转换为枚举值,json,angular,typescript,serialization,enums,Json,Angular,Typescript,Serialization,Enums,我喜欢将json字符串值转换为enum,这样它就可以在html页面上显示/呈现自定义字符串。 错误消息:类型“{id:number;名称:string;状态:string;}[]”不能分配给类型“status[]” 我有这样一个json记录: { id: 1, name: 'Some name', status: 'STATUS01' }, status.enum.ts export enum Status { 'STATUS01' = 'Operational', 'STATUS02

我喜欢将json字符串值转换为enum,这样它就可以在html页面上显示/呈现自定义字符串。 错误消息:类型“{id:number;名称:string;状态:string;}[]”不能分配给类型“status[]”

我有这样一个json记录:

{ id: 1, name: 'Some name', status: 'STATUS01' },
status.enum.ts

export enum Status {
  'STATUS01' = 'Operational',
  'STATUS02' = 'Some other status'
}
该枚举用于模型中

import { Status } from './status.enum';

export class ServiceState {
  id: number;
  name: string;
  status: Status;
}
服务中有一个检索所有状态(虚拟数据)的功能:

getStatuses():可观察{
常数响应=[
{id:1,名称:'One',状态:'STATUS01'},
{id:2,名称:'2',状态:'STATUS01'},
{id:3,名称:'OneTwo',状态:'STATUS02'},}
];
回复(回复);
}

返回抛出错误

您应该实际使用枚举值:

export enum Status {
  STATUS01 = 'Operational',
  STATUS02 = 'Some other status'
}

const response = [
  { id: 1, name: 'One', status: Status.STATUS01 },
  { id: 2, name: 'Two', status: Status.STATUS01 },
  { id: 3, name: 'OneTwo', status: Status.STATUS02 },
  // ...
];

如果要映射枚举中的值:

getStatuses(): Observable<ServiceState[]> {
  const response = [
    { id: 1, name: 'One', status: 'STATUS01' },
    { id: 2, name: 'Two', status: 'STATUS01' },
    { id: 3, name: 'OneTwo', status: 'STATUS02' },
  ];

  return of(response).pipe(
    map((states) => states.map((state) => ({
      ...state,
      status: Status[state.status]
    } as ServiceState)
  );
}
getStatuses():可观察{
常数响应=[
{id:1,名称:'One',状态:'STATUS01'},
{id:2,名称:'2',状态:'STATUS01'},
{id:3,名称:'OneTwo',状态:'STATUS02'},
];
返回(响应)。管道(
映射((状态)=>states.map((状态)=>({
状态
状态:状态[状态.状态]
}作为服务状态)
);
}

我仍然不理解您的问题,但是您可能需要映射API的响应以匹配您的类类型

服务

public getStatuses():可观察{
返回此.http.get('url').pipe(
映射(data=>data.forEach(item=>{
item.status=状态[item.status];
}))
);
}

如果您只使用类来声明类型,那么一个简单的接口就足够了。

请添加引发错误的代码。webapi将返回一个STATUS01(字符串)not Status.STATUS01。这是一些虚假数据。@Babulaas如果您键入的数据不正确,或者您必须映射响应中的值,我必须映射这些值。我度过了漫长的一天。谢谢您的修复。@Babulaas,但荷兰现在还不到下午4点:D,您应该尽量少工作,否则您的生产率会下降太多!
getStatuses(): Observable<ServiceState[]> {
  const response = [
    { id: 1, name: 'One', status: 'STATUS01' },
    { id: 2, name: 'Two', status: 'STATUS01' },
    { id: 3, name: 'OneTwo', status: 'STATUS02' },
  ];

  return of(response).pipe(
    map((states) => states.map((state) => ({
      ...state,
      status: Status[state.status]
    } as ServiceState)
  );
}