【问题标题】:ERROR SyntaxError: Unexpected token u in JSON at position 0 at JSON.parse (<anonymous>)错误语法错误:JSON.parse (<anonymous>) 位置 0 处的 JSON 中的意外标记 u
【发布时间】:2018-04-13 11:58:26
【问题描述】:

我的函数JSON.parse()有问题

我使用这个是因为我来自网络服务器的数据总是一个字符串。 我有这个 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" }"

到:

{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 为此我必须进行字符串处理

【问题讨论】:

  • 您共享的 JSON 样本的第一个位置没有“u”字母。我的猜测是this.data 是“未定义的”.. 你能console.log 它检查一下吗?
  • 请编辑我的帖子
  • 这不是格式错误的 JSON 吗? JSONLint 解析失败.. 引号应该被转义
  • @MasterPo 我的数据,我想转换成正确的Json
  • 你能试试JSON.parse(this.data.replace(/"/g, '\\"'))吗?它在解析之前转义字符串中的所有双引号

标签: json angular typescript


【解决方案1】:

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

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

但是您之前从未将this.data 分配给任何东西,因此undefinedJSON.parse 失败。

【讨论】:

    【解决方案2】:

    这个问题的出现可能是由于两个原因

    首先 => 你的 data 已经被解析或没有出现字符串,所以这样做

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

    第二 => 检查你的 Json 我认为可能有问题。

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

    this.data =JSON.parse(this.data.replace(new RegExp('}"',"g"),"}").replace(new RegExp('"{',"g"),"{").trim())
    

    【讨论】:

    • 当我尝试这段代码时,我的数据是空的。 data:{}
    • 好的,你能检查一下 this.data 的类型吗?
    • 您也可以这样做以检查typeof :- this.data = typeof this.data
    • 当您更新 `this.data` 时,您能否使用 `this.data` 的完整值更新您的问题
    • 对不起,我不太明白你在找什么。我再次修改我的帖子。谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2022-01-26
    • 1970-01-01
    • 2017-06-27
    • 2022-06-17
    • 2020-04-12
    • 1970-01-01
    • 2018-12-13
    相关资源
    最近更新 更多