【问题标题】:Should I Parse JSON Data Before Inserting To MongoDB?我应该在插入 MongoDB 之前解析 JSON 数据吗?
【发布时间】:2013-05-11 23:36:31
【问题描述】:

所以,我从客户端接收一些 JSON 数据到我的 Node.JS 服务器。我想使用 Mongoose 将该 json 插入到我的 MongoDB 实例中。

我可以按原样插入 JSON,而且效果很好,因为它只是文本。但是,我想在插入之前对其进行解析,以便稍后提取它时,它会变得非常整洁。

所以,这行得通:

wordStream.words.push(wordData);

这不是:

wordStream.words.push(JSON.parse(wordData));
  1. 那么,我是否应该在插入之前解析 JSON?

  2. 如果我应该解析 JSON,我该如何做而不抛出错误?我相信,在解析之前,我需要将所有内容都放在双引号“”中,但是由于某种原因,每当我用双引号创建一个字符串并对其进行解析时,一切都会出错。

这是 JSON:

      { word: 'bundle',
          definitions:
           [ { definition: 'A group of objects held together by wrapping or tying.',
               partOfSpeech: 'noun' } ],
          urlSource: 'testurl',
          otherSource: '' }

当我尝试解析时的错误

/Users/spence450/Documents/development/wordly-dev/wordly-server/node_modules/mongoose/lib/utils.js:409
        throw err;
              ^
SyntaxError: Unexpected token o

想法?

【问题讨论】:

  • 您的 json 字符串中的任何 \t,\n。可能是?
  • 根据JSON.parse docs“如果要解析的字符串不是有效的JSON,就会抛出SyntaxError异常。”而关于SyntaxError: Unexpected token o 似乎你明白了,因为'o' char 是[object Object] 的第一个字符 - 对象默认字符串表示。试试console.log(JSON.parse({"t":"3"})); 你会得到同样的错误。所以这里似乎解析出错了。
  • 你从哪里得到那个 JSON?为什么不用双引号(属性和值)引用它?
  • 好吧,我在这里肯定很困惑。为什么 console.log(JSON.parse({"t":"3"})) 解析不正确?我可以使用 json.org 上的 JSON 状态机发誓这是正确的语法!

标签: node.js mongodb mongoose


【解决方案1】:

那么,我是否应该在插入之前解析 JSON?

当您需要在 MongoDB 数据库中进行查询时,将字符串转换为 JSON 对象将使您受益。

如果我应该解析 JSON,我该如何做而不抛出错误?我相信,在解析之前,我需要将所有内容都放在双引号“”中,但是由于某种原因,每当我用双引号创建一个字符串并解析它时,一切都会出错。

您没有收到 JSON 文档。 JSON 文档必须包含引用的键。

你可以:

  • 使用可识别无效 JSON 对象的库(请不要)
  • 使用eval(这是一个安全问题,所以不要这样做)
  • 修复问题的根源,创建真正的 JSON 对象。这个不难,可以看到JSON特性here

【讨论】:

    猜你喜欢
    • 2013-09-03
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2014-08-09
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多