Как сопоставить данные JSON для модели с использованием Pattern Adapter Pattern в Ionic / Angular - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть Json данные, которые выглядят следующим образом:

{
    "restaurant": null,
    "details": [
        {
            "text": {
                "text": "Tea",
                "coordinateX": 311
            },
            "price": {
                "unitPrice": 5.0,
                "coordinateX": 389
            }
        },
        {
            "text": {
                "text": "Americano",
                "coordinateX": 311
            },
            "price": {
                "unitPrice": 41.24,
                "coordinateX": 205,
            }
        },
        {
            "text": {
                "text": "Latte",
                "coordinateX": 130
            },
            "price": {
                "unitPrice": 43.24,
                "coordinateX": 205,
            }
        }
    ]
} 

Я использую шаблон адаптера модели для сопоставления результата json из API с моделями, которые я создал. Моя проблема в том, что вложенные объекты не отображаются. Только самый внешний объект имеет вид.

Объект ImageResult - это единственный объект, который правильно сопоставлен

export class ImageResult {
    constructor(
        public Restaurant: string,
        public CapturedDetails: Array<Details>
    ) {}

    static adapt(item: any): ImageResult {
        return new ImageResult(
            item.restaurant,
            item.details
        );
      }
  }

Подробности Объект - больше не отображается. Отображается как generi c Object

export class Details {
    constructor(
        public Text: Word,
        public UnitPrice: Price
    ) {}

    static adapt(item: any): Details {
        return new Details(
            item.text,
            item.price
        );
      }
  }

Word Object - больше не отображается. Отображается как generi c Object

export class Word {
    constructor(
        public Text: string = '',
        public CoordinateX: number  = 0
    ) {}

    static adapt(item: any): Word {
        return new Word(
            item.text,
            item.coordinateX
        );
      }
  }

Отображение при вызове API:

GetText(formData: FormData): Observable<ImageResult> {
    return this.httpClient.post(this.getServiceUrl('TextCapture'), formData)
    .pipe(map(ImageResult.adapt));
  }

1 Ответ

0 голосов
/ 20 февраля 2020
GetText(formData: FormData): Observable<any> {
    return this.httpClient.post(this.getServiceUrl('TextCapture'), formData)
        .map(Response => Response.json())
        .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}
...