2016-09-12 62 views
1

Jq是一个在bash中处理JS文档的奇妙工具。但是由于Mongodb添加的功能,我不能用它来解析一些MongoDB输出文档。的MongoDB的的Json返回 实施例:Jq无法解析MongoDB输出文档

{ 
    "_id" : "example", 
    "version" : 23, 
    "members" : [ 
     { 
      "_id" : 0, 
      "host" : "192.168.0.1:27017", 
      "slaveDelay" : NumberLong(0), <---- Here jq failed to parse this line 
      "votes" : 1 
     } 
]} 

通过JQ给出的错误是:

parse error: Invalid numeric literal at line 15, column 32 

任何帮助,将不胜感激。

回答

5

我知道我在这里有点晚,但Mongo shell具有内置的JavaScript支持。所以你可以使用JSON.stringify

对于上述具体的例子,你可以使用下面

mongo --quiet --eval "JSON.stringify(rs.config())"

+1

Woow。很多人为此感谢。我认为这是一个比下面给出的解决方法更好的答案。 – jmcollin92

2

,这是造成的,因为蒙戈使用mongoexport与json选项将允许产生清洁JSON文件后端see this

使用BSON:

"CreatedDate":{"$date":"2016-08-13T01:01:20.833Z"} 

代替:

"CreatedDate" : ISODate("2016-08-13T01:01:20.833Z"), 
+1

谢谢对您的答案,但我需要这个蒙戈shell命令的输出,而不是在数据导出。例如,我需要解析显示ReplicatSet配置的“rs.config()”的结果。我想解析的确切数据如下:mongo --eval“rs.config()” – jmcollin92

+0

请参阅http://stackoverflow.com/questions/32097209/force-mongodb-to-output-strict-json。我遇到了完全相同的问题! – whereswalden

3

一可能足以满足某些用途的解决方法是转换mongo shell命令的输出。我使用此模式解决方法:

mongo --quiet --eval "rs.config()" | sed -e 's/: [a-zA-Z]*(\(.*\))/: "\1"/' | jq '.' 

它删除':'后的所有函数调用并仅保留该值。

+1

好的解决方法! – profesor79