Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

executable file 73 lines (64 sloc) 2.006 kb
#!/usr/bin/env ruby
# 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'
# We don't use YAJL because we need to specify the class
# to store the JSON object in. BSON is ordered so we need BSON::OrderedHash
#
# We use json/pure because json/ext is broken with BSON::OrderedHash
# (probably for the same reasons that we can't use YAJL).
#
# Note that, at the moment, this will not properly round-trip
# in all cases from the output generated by b2json.
begin
require 'json/pure' # broken with 'json/ext'
rescue LoadError
puts "This script requires json/pure. Please install one of the following:"
puts " gem install json_pure"
puts " gem install json"
Process.exit
end
# Convert all JSON objects in an IO into BSON.
def print_j2bson(io)
io.each_line do |line|
jsonobj = JSON.parse(line, { :object_class => BSON::OrderedHash } )
bsonobj = BSON.serialize(jsonobj)
STDOUT << bsonobj.to_s
end
end
# print usage
def usage()
STDERR << <<END_OF_USAGE
usage: j2bson [-h] [file1 [file2]]
Converts a JSON file to BSON on STDOUT.
You can pass multiple filenames.
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_j2bson(STDIN)
exit
elsif ARGV[0] == "-h" then
usage()
else
ARGV.each { |fname| print_j2bson(File.new(fname)) }
end
Jump to Line
Something went wrong with that request. Please try again.