JS: ОШИБКА SyntaxError: Неожиданный токен u в JSON в позиции 0, Nativescript - PullRequest
0 голосов
/ 05 июля 2018

У меня проблема с Json.parse.

Я использовал это только в модели, как между:

export class EventsGps {
    eventsgps_id: string;
    latitude: String;
    longitude: string;
    gps_serial: string;  
    event_data: EventData;
    ev_data: any;

    constructor(obj: any) {
        this.ev_data = JSON.parse(obj.event_data);
        this.event_data = this.ev_data;
        this.eventsgps_id = obj.eventsgps_id;
        this.latitude = obj.latitude;
        this.longitude = obj.longitude;
        this.gps_serial = obj.gps_serial;
    }
}

В HTML я не могу показать данные, потому что показать эту ошибку, эта ошибка только для этих данных

            this.eventsgps_id = obj.eventsgps_id;
            this.latitude = obj.latitude;
            this.longitude = obj.longitude;
            this.gps_serial = obj.gps_serial;

event_data выглядит хорошо.

Можете ли вы спросить меня, как решить эту проблему?

Когда я удаляю JSON.parse, все выглядит хорошо, только event_data не отображается, потому что из ws данные о событиях поступают так:

JS:   "event_data": "{\"alarmtype\":\"call\",\"datetime_hb\":\"2018-03-29 12:24:32\",\"hb_serial\":\"aaaa\"}",

Спасибо

UPDATE:

Я пишу этот сервисный код, чтобы получить все данные:

  public getgps(): Observable<EventsGps[]> {
    let headers = new Headers();
    headers.append('x-access-token', this.auth.getCurrentUser().token);
    return this.http.get(Api.getUrl(Api.URLS.getsgps), {
      headers: headers
    })
      .pipe(map((response: Response) => {
        let res = response.json();
        if (res.StatusCode === 1) {
        } else {
          return res.StatusDescription.map(gps1 => {
           console.log('getgps')
          console.log(gps1)
            return new EventsGps(gps1);
          });
        }
      }))
  }

Результат:

: {
JS:   "eventsgps_id": "1",
JS:   "latitude": 50.2029,
JS:   "longitude": 20.3939,
JS:   "gps_serial": "testgps",
JS: }

Я пишу этот сервисный код для получения всех данных событий

 public getallevents(): Observable<EventsGps[]> {
    let headers = new Headers();
    headers.append('x-access-token', this.auth.getCurrentUser().token);
    return this.http.get(Api.getUrl(Api.URLS.getallevents), {
      headers: headers
    })
      .pipe(map((response: Response) => {
        let res = response.json();
        if (res.StatusCode === 1) {
        } else {
          return res.StatusDescription.map(gps => {
           console.log(gps)
            return new EventsGps(gps);
          });
        }
      }))
  }

Результаты:

JS: gps events
JS: {
JS:   "id": "1",
JS:   "alarmtype_id": 2,
JS:   "alarmnumber": 5,
JS:   "device_serial": "testgps",
JS:   "acted": 1,
JS:   "user_acted": "31000000000000000000000000000000",
JS:   "dtm_acted": "2018-06-26 03:06:49",
JS:   "event_data": "{\"alarmtype\":\"call\",\"datetime_hb\":\"2018-03-29 12:24:32\",\"hb_serial\":\"aaaa\"}",
JS: }

Obj

constructor(obj: any) {
    console.log('obj')
    console.log(obj)
     ....
        }

Результат:

JS: obj
    JS: {
    JS:   "id": "1",
    JS:   "alarmtype_id": 2,
    JS:   "alarmnumber": 5,
    JS:   "device_serial": "testgps",
    JS:   "acted": 1,
    JS:   "user_acted": "31000000000000000000000000000000",
    JS:   "dtm_acted": "2018-06-26 03:06:49",
    JS:   "event_data": "{\"alarmtype\":\"call\",\"datetime_hb\":\"2018-03-29 12:24:32\",\"hb_serial\":\"aaaa\"}",
    JS: }
JS: obj
   : {
    JS:   "eventsgps_id": "1",
    JS:   "latitude": 50.2029,
    JS:   "longitude": 20.3939,
    JS:   "gps_serial": "testgps",
    JS: }

console.log (this.event_data) enter image description here

1 Ответ

0 голосов
/ 05 июля 2018

Ваш obj.event_data равен undefined в момент, когда вы пытаетесь его проанализировать.

Это будет проанализировано без каких-либо проблем:

JSON.parse("{\"alarmtype\":\"call\",\"datetime_hb\":\"2018-03-29 12:24:32\",\"hb_serial\":\"aaaa\"}");

Хотя это приведет к ошибке Unexpected token u in JSON at position 0:

JSON.parse(undefined);

Обновление

После просмотра обновленного вопроса ваш первый пример (gps1) действительно имеет неопределенное свойство event_data.

const gps1 = {
  "eventsgps_id": "1",
  "latitude": 50.2029,
  "longitude": 20.3939,
  "gps_serial": "testgps",
}

JSON.parse(gps1.event_data); // Unexpected token u in JSON at position 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...