I believe that when you assign testObj to the value property of the <input> control
the object is converted to text by an implicit call to its toText() method. The default toText() method of an object usually just returns "[object Object]". You could define a custom toText() method in your object that would return a string that represents the entire content of the object in JSON format, as MarPlo suggested. Otherwise, your Page 1 code can remain as it is. Then, of course, you'll have to read the JSON formatted string in your Page 2.
BTW, with ECMAScript5, the JSON object provides a set of properties for working with the JSON format, although I'm not sure how well supported they are by current browsers.
Since i had a complex type object which contained properties, arrays, and arrays of objects...I used the JSON.stringify() method of the json2.js script file to convert my complex type to string.
Then to reconvert the string to its original type, the JSON.parse() method from the same json2.js file.
This makes it very easy to move around complex types between pages.
The JSON object is part of ECMAScript 5. For the sake of older browsers, you might want to test whether this object is present, and if it isn't use the public-domain json2.js module available at https://github.com/douglascrockford/...aster/json2.js. json2.js is apparently almost identical to the ECMAScript 5 JSON object.