错误SyntaxError:JSON.parse(<anonymous>)位置0的JSON中出现意外的标记u

时间:2018-04-13 11:58:27

标签: json angular typescript

我遇到了函数JSON.parse()

的问题

我使用了这个,因为来自Web服务器的数据总是一个字符串。 我有这个JSON

 {
        "StatusCode": 0,
        "StatusMessage": "OK",
        "StatusDescription": 
           [
             {
                "id": "1",
                "datetime": "2018-04-13",
                "data":"{ "id_data": "1S1S2ED333", "model": "02S", "serial_data": "123456" }"
             }
           ]
          }

我想转换此字符串

"{ "id_data": "1S1S2ED333", "model": "02S", "serial_data": "123456" }"

to:

{id_data: "1S1S2ED333", model: "02S",serial_data:"123456"}

我试图转换:

 export class Product{
        id: number;
        datetime: Date;
        data: string;

        constructor(obj: any) {
            this.id= obj.id;
            this.datetime= obj.datetime;
            this.data = obj.data;  //show "data":"{ "id_data": "1S1S2ED333", "model": "02S", "serial_data": "123456" }"
            this.data= JSON.parse(this.data); // show ERROR SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse (<anonymous>)
            this.data = typeof this.data == "object"? this.data : typeof this.data == "string"? JSON.parse(this.data) : {}; `//show data:{}`
            this.data = obj && JSON.stringify(this.data ); //undefined

            }
public generateUrlencodedParameters(token: string, id?: number): string {

    let urlSearchParams = new URLSearchParams();
          urlSearchParams.append('data', this.data.toString());
          urlSearchParams.append('datatime', this.datatime.toString());
          urlSearchParams.append('token', token);
    return urlSearchParams.toString();
     }
    }

你能建议我,问题是什么?

我想在html中显示这些数据。

当我尝试

<table *ngFor="let item of products">
   <tr>{{item.id}}</tr>
   <tr>{{item.datatime}}</tr>
   <tr>{{item.data}}</tr> //show all string { "id_data": "1S1S2ED333", "model": "02S", "serial_data": "123456" }
</table>

我只想显示modelserial_data,我必须进行字符串处理

2 个答案:

答案 0 :(得分:0)

由于两个原因,这个问题可能会出现

First =&gt;您的data已经被解析或者没有来过字符串,所以为此

执行此操作

this.data = typeof this.data == "object"? this.data : typeof this.data == "string"? JSON.parse(this.data) : {};

秒=&gt;检查你的Json我认为可能有问题。

我不确定它是否会起作用,因为你的JSON没有以正确的格式特别是数据属性。我建议你从服务器

以适当的格式发送JSON
this.data =JSON.parse(this.data.replace(new RegExp('}"',"g"),"}").replace(new RegExp('"{',"g"),"{").trim())

答案 1 :(得分:0)

我认为您的问题在于您的构造函数(至少在您与我们分享的内容中):

this.data = JSON.parse(this.data);

但您从未将this.data分配给任何内容,因此undefinedJSON.parse失败。