【问题标题】:JS: ERROR SyntaxError: Unexpected token u in JSON at position 0, NativescriptJS:错误语法错误:JSON 中位置 0 的意外标记 u,Nativescript
【发布时间】:2018-12-13 18:04:08
【问题描述】:

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\"}",

谢谢

更新:

我写这个服务代码来获取所有数据:

  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: }

对象

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)

【问题讨论】:

  • 如果你console.log(obj.event_data),你会得到{\"alarmtype\":\"call\",\"datetime_hb\":...吗?
  • 是的,但是当我使用JSON.parse(obj.event_data); 时,我得到了正确的格式数据
  • 那么,如果正确记录,听起来解析功能失败

标签: json angular typescript nativescript


【解决方案1】:

在您尝试解析它时,您的 obj.event_dataundefined

这将毫无问题地解析:

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

【讨论】:

  • 你说要这样写:this.ev_data = JSON.parse(undefined); this.event_data = this.ev_data;
  • 不,我绝对不是这样说的。我是说您正在尝试解析 undefined 值而不是 JSON 字符串。至于为什么那个值是undefined,我无法推测,因为我没有上下文。
  • 他说你的数据可能是未定义的。所以你应该在解析之前检查它是否未定义。
  • 我得到的所有数据都是正确的,不是未定义的。 :( 因为我可以在 html 中显示那些 event_data。
  • 如果您确信您的所有数据都是正确的,请在您的问题中添加一个数据对象,以便我们自己尝试重现该问题。在这一点上,我们所拥有的只是您保证您的数据是正确的,而我几乎可以保证它不是。所以提供数据,我们会看到的。
猜你喜欢
  • 1970-01-01
  • 2017-10-21
  • 2018-01-29
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多