I think your naming should be fine.because i sometimes use these kind of naming to populate my list on the server side, I use Struts 2.
I ran into a problem similar to yours recently while doing an Ajax example for my friend. What i did was just like seasoup suggested. you might want to try $("li:has(:hidden[name^=Theme]).each(function(i){ var subject = $(":hidden[name$=Subject]", this).val(); //...etc for each input //then reorganize your index in the name of the fields // maybe create a new html then insert back into the li }) my selector may not be the best, just so that hopefully you get get concept