Here is a patch to make my solution check the return value for
conformance with the rfc:

--- quiz155ir0.rb	2008-02-03 18:07:19.186889600 +0100
+++ quiz155i.rb	2008-02-03 18:08:58.008988800 +0100
@@ -48,10 +48,16 @@
             end
         end
         begin
-            return eval(ruby)
+            value = eval(ruby)
+            case value
+            when Array
+                return value
+            when Hash
+                return value if value.all? {|k, v| k.kind_of?
(String)}
+            end
         rescue Exception => e
-            invalid(json)
         end
+        invalid(json)
     end

     def invalid(string)