2012-05-20 11:24:45 +00:00
|
|
|
#!/usr/bin/env ruby
|
2010-05-28 18:01:51 +00:00
|
|
|
# encoding: UTF-8
|
|
|
|
|
|
|
|
# --
|
|
|
|
# Copyright (C) 2008-2010 10gen Inc.
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
|
|
|
# ++
|
|
|
|
|
|
|
|
require 'rubygems'
|
|
|
|
require 'bson'
|
|
|
|
|
2010-07-12 18:08:33 +00:00
|
|
|
# Note that this will not properly round-trip in all cases
|
|
|
|
# from the output generated by j2bson.
|
2010-05-28 18:01:51 +00:00
|
|
|
begin
|
|
|
|
require 'yajl'
|
|
|
|
rescue LoadError
|
|
|
|
puts "This script requires yajl. Please install as follows:"
|
|
|
|
puts " gem install yajl-ruby"
|
|
|
|
Process.exit
|
|
|
|
end
|
|
|
|
|
|
|
|
# Convert all documents in an IO into JSON.
|
|
|
|
def print_b2json(io)
|
|
|
|
while not io.eof? do
|
|
|
|
bsonobj = BSON.read_bson_document(io)
|
|
|
|
Yajl::Encoder.encode(bsonobj, STDOUT)
|
|
|
|
STDOUT << "\n"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# print usage
|
|
|
|
def usage()
|
|
|
|
STDERR << <<END_OF_USAGE
|
2010-06-15 14:33:18 +00:00
|
|
|
usage: b2json [-h] [file1 [file2]]
|
2010-05-28 18:01:51 +00:00
|
|
|
|
|
|
|
Converts a BSON file to JSON on STDOUT.
|
2010-06-15 14:33:18 +00:00
|
|
|
You can pass multiple filenames.
|
2010-05-28 18:01:51 +00:00
|
|
|
If no filenames are passed, then STDIN is consumed.
|
|
|
|
|
|
|
|
END_OF_USAGE
|
|
|
|
exit
|
|
|
|
end
|
|
|
|
|
|
|
|
# no arg, use STDIN
|
|
|
|
# -h, print usage and exit
|
|
|
|
# otherwise loop of filenames
|
|
|
|
if ARGV.empty? then
|
|
|
|
print_b2json(STDIN)
|
|
|
|
exit
|
|
|
|
elsif ARGV[0] == "-h" then
|
|
|
|
usage()
|
|
|
|
else
|
|
|
|
ARGV.each { |fname| print_b2json(File.new(fname)) }
|
|
|
|
end
|