Jq无法解析MongoDB输出文件

时间:2016-09-12 09:57:50

标签: json mongodb jq

Jq是一个用bash处理JS文档的精彩工具。但由于Mongodb添加的功能,我不能用来解析一些MongoDB输出文件。 MongoDB Json返回的示例:

{
    "_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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:12)

我知道我有点太晚了,但是Mongo shell有内置的JavaScript支持。所以你可以使用JSON.stringify

对于上面的具体示例,您可以使用以下

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

答案 1 :(得分:5)

对于某些用途而言足够的解决方法是转换mongo shell命令的输出。我使用此模式进行解决方法:

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

它删除了&#39;之后的所有函数调用:&#39;并且只保留价值。

答案 2 :(得分:3)

这是因为mongo在后端使用BSON see this

使用带有json选项的mongoexport将允许生成干净的json文件:

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

而不是:

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