node取mongodb数据

我前端提交的数据是这样的

 {
    "Names": [{
        name: "关于我们",
        address: "[栏目]关于我们",
        icon: "默认",
        bg: "默认",
        Accor: ["checkmark-round", "close-round", 0]

    }, {
        name: "案例欣赏",
        address: "[栏目]案例欣赏",
        icon: "默认",
        bg: "默认",
        Accor: ["checkmark-round", "close-round", 0]
    }, {
        name: "服务介绍",
        address: "[栏目]服务介绍",
        icon: "默认",
        bg: "默认",
        Accor: ["checkmark-round", "close-round", 0]
    }]
}

利用node保存到mongodb里面
但是保存的样式是
clipboard.png 这样的,

在利用express取到保存的数据,输出到服务器,我在利用axios,去取数据,但是取不到Names,能取到_id

clipboard.png 这是取到的数据

PS:Names前面多了一个花括号,怎么能去掉啊

PSSS:我不能取到JSON数据。。

阅读 3.8k
5 个回答

这不是多了一个花括号的问题,从犯的错误来看,你可能对JSON是什么东西还缺乏了解。举个例子,100是数字,但是"100"是字符串。同理,{"a": 1}JSON"{\"a\": 1}"是字符串。
JSON的本质是一个可以嵌套的键值对,你不仅把一个JSON对象作为字符串存到了数据库里,而且是作为另一个JSON对象的存进去的。这种方式语法上虽然没有错,但对MongoDB而言没有任何意义,肯定也不能做任何查询。
没有看到代码,所以只能猜测可能发生了什么问题,据此来说明这个问题。
一般来说如果JSON是被POST过来的你会有一个类似于以下代码来得到这份数据:

var json = req.body.json;

从你上面的情况来看,你把这个东西直接给存进MongoDB里面,会有类似于:

var obj = {
  _id: new ObjectId(),
  json: ""
};
// 将obj保存到MongoDB

只有做了类似这样的操作,才会有你截图中的结果存在。要得到正确的结果,应该做的是:

var obj = JSON.parse(json); // 将客户端得到的字符串转换为真正的JSON
obj._id = new ObjectId();  // 为JSON添加一个唯一_id
// 保存到MongoDB

你利用node将数据保存到mongodb里面,将一整串信息以字符串的形式存进去了.
解决方案一,取出来的时候,JSON.parse()格式化为json,在传到前端,或者前端调用JSON.parse()格式化为json.
方案二,保存的时候,将字符串格式化为json,再保存

建议检查是否在express中配置了bodyparser中间件,用于将body解析为json。

app.use(bodyParser());

供参考。

Love MongoDB!Have fun!

新手上路,请多包涵

没处理json?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题