如何从存储JavaScript对象的mysql列取回有效JSON

时间:2019-04-29 08:19:37

标签: javascript mysql json angular

我有一些数据需要存储在mysql表中。该表有几列,其中bookauthors列,它们都是TEXT字段。我需要在book列中存储一个javascript对象,在authors列中存储一个对象数组。

在我的角度组件中,我有book对象和authors对象数组。

const book = {
   title: "hello world",
   subtitle: "learn C programming in a week",
   cover: "path/to/cover.png"
};

const authors = [{id: 3, name: "John Doe"}, {id: 4, name: "Jane Doe"}];

我传递给我的服务以处理发布请求的对象看起来像以下内容。

{
   id: this.generateId(),
   category: this.category,
   book: JSON.stringify(book),
   authors: JSON.stringify(authors),
   price: this.price
}

这两个都通过JSON.stringify(...)进行了字符串化,然后成功地发布到了数据库中。没问题。 我还应该提到,对象值已被捕获并放入POST请求的SQL语句中,就像这样...

`INSERT INTO library (id, category, book, authors)
 VALUES ('${obj['id']}',
              '${obj['category']}',
              '${obj['book']}',
              '${obj['authors']}')`

但是,当我尝试通过我的角度服务从该表中检索数据时,角度抛出错误Http failure during parsing for http://localhost:4200/

当我通过postman发出相同的请求时,我取回了数据,但是当我检查返回的JSON的有效性时,它是无效的。返回的数据看起来像这样... title"突出显示,错误为Expecting comma, colon or }, not string

[
  {
    "book": "{
      "title": "hello world",
      "subtitle": "learn C programming in a week",
      "cover": "path/to/cover.png"
    }",
    "authors": "[{"id": "3", "name": "John Doe"}, {"id": "4", "name": "Jane Doe"}]"
  }
]

我想念什么?如何获取有效的JSON?

1 个答案:

答案 0 :(得分:0)

“ book”:“ {-看来您已经分别将这两个值加了细化,然后又添加到了一个对象上?

如果是这样,请首先创建一个对象并对整个对象进行字符串化。