From 84d13af8f362a7396dcb83bb0a3c7a539752cc35 Mon Sep 17 00:00:00 2001 From: Jason Thomas Date: Tue, 17 Oct 2023 13:50:15 -0600 Subject: [PATCH] Hash as_json handle unlimited items --- openc3/lib/openc3/io/json_rpc.rb | 12 ++++++------ openc3/spec/packets/packet_spec.rb | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/openc3/lib/openc3/io/json_rpc.rb b/openc3/lib/openc3/io/json_rpc.rb index 864f09204d..5c319a27a7 100644 --- a/openc3/lib/openc3/io/json_rpc.rb +++ b/openc3/lib/openc3/io/json_rpc.rb @@ -36,9 +36,9 @@ def as_json(options = nil) #:nodoc: class Struct #:nodoc: def as_json(options = nil) - pairs = [] - self.each_pair { |k, v| pairs << k.to_s; pairs << v.as_json(options) } - Hash[*pairs] + hash = {} + self.each_pair { |k, v| hash[k.to_s] = v.as_json(options) } + hash end end @@ -115,9 +115,9 @@ def as_json(options = nil) #:nodoc: class Hash def as_json(options = nil) #:nodoc: - pairs = [] - self.each { |k, v| pairs << k.to_s; pairs << v.as_json(options) } - Hash[*pairs] + hash = {} + self.each {|k,v| hash[k.to_s] = v.as_json(options) } + hash end end diff --git a/openc3/spec/packets/packet_spec.rb b/openc3/spec/packets/packet_spec.rb index ba6f8964ec..0dcf785d0a 100644 --- a/openc3/spec/packets/packet_spec.rb +++ b/openc3/spec/packets/packet_spec.rb @@ -1557,6 +1557,22 @@ module OpenC3 expect(json['accessor']).to eql "OpenC3::BinaryAccessor" expect(json['template']).to eql Base64.encode64("\x00\x01\x02\x03") end + + it "handles many items" do + packet = Packet.new("tgt", "pkt") + (1..2048).each do |idx| + (1..100).each do |field| + packet.append_item("field_X#{field}_#{idx}", 64, :UINT) + end + end + expect(packet.sorted_items.length).to eql 204800 + json_hash = Hash.new + packet.sorted_items.each do |item| + json_hash[item.name] = nil + end + json = json_hash.as_json(:allow_nan => true) + expect(json.length).to eql 204800 + end end describe "self.from_json" do