Jq无法解析MongoDB输出文件

jmc*_*n92 5 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
        }
]}
Run Code Online (Sandbox Code Playgroud)

jq给出的错误是:

parse error: Invalid numeric literal at line 15, column 32
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

小智 13

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

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

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


jmc*_*n92 6

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

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

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

  • 那很好的解决方法! (2认同)

pro*_*r79 5

这是因为 mongo 在后端使用 BSON 造成的,请参阅此

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

 "CreatedDate":{"$date":"2016-08-13T01:01:20.833Z"}
Run Code Online (Sandbox Code Playgroud)

代替:

 "CreatedDate" : ISODate("2016-08-13T01:01:20.833Z"),
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答,但我需要这个用于 mongo shell 命令输出而不是数据导出。例如,我需要解析显示 ReplicatSet 配置的“rs.config()”结果。我想解析的确切内容如下: mongo --eval "rs.config()" (2认同)