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