2017-02-08 15 views
-1

Я написал метод в приложении Angular 2, который создает и возвращает Observable класса, после вызова сервера, который возвращает JSON. Однако JSON плохо отформатирован, поэтому мне нужно скорректировать исправление возвращенного JSON перед отправкой его на метод .json(), который в настоящее время выдает ошибку из-за плохо отформатированного JSON.Как изменить данные, хранящиеся в RxJS, наблюдаемые?

В частности, мне нужно найти ошибочную запятую в JSON, которая появляется после закрытия скобки массива, и удалить ее.

Мой вопрос

Что именно следует, что функция Observable.map выглядеть? Как я могу найти и управлять фактической строкой JSON, а затем отправить ее? Я новичок во всем этом, поэтому детали будут оценены.

getList(): Observable<Thing[]> { 
    let response = this.http.get('/api/get-things'); 
    let fixed = response.map(____WHAT GOES HERE?_____); 
    return fixed.map((r: Response) =>r.json as Thing[]); 
} 
+2

Непонятно, что вы имеете в виду, но похоже, что еще одна карта на наблюдаемом будет достаточной. Либо перед вызовом метода JSON, если вам нужно изменить тело ответа или после этого, если вам нужно изменить результирующий объект. – jonrsharpe

+0

Благодарим вас за отзыв. Я отредактировал вопрос, чтобы добавить более подробную информацию и более конкретно описать, что я хочу. –

+0

Что вы пробовали поставить там? Вы пытались использовать отладчик или просто консоль, чтобы узнать, что вы получаете? Прочитайте документы в объекте ответа? Пожалуйста, дайте [mcve] конкретной проблемы. – jonrsharpe

ответ

1

Предполагая, что вы есть fix метод:

const fix = (json: string) => { 
    // ... 
} 

Вы могли бы сделать что-то вроде этого:

const things: Observable<Thing[]> = this.http.get('/api/get-things') 
    .map(response => response.text()) 
    .map(fix) 
    .map(fixedJson => JSON.parse(fixedJson) as Thing[]) 

Однако это очень плохая идея. Исправьте код на стороне сервера!