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
非常感谢任何帮助。
答案 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"),