j2bson (json to bson) executable (neomantra)
This commit is contained in:
parent
2a3c7bc34e
commit
027038fdff
69
bin/j2bson
Executable file
69
bin/j2bson
Executable file
@ -0,0 +1,69 @@
|
||||
#!/usr/bin/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).
|
||||
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
|
Loading…
Reference in New Issue
Block a user