As I have been receiving all along, the code you suggested gives me the following error:
" TypeError at /course/savegantt/ string indices must be integers " There must be something not quite right about the for loop statement ("for obj in serializers.deserialize('json', gantt_data): ") On Sep 6, 3:42 pm, "J. Clifford Dyer" <j...@sdf.lonestar.org> wrote: > On Sat, 2009-09-05 at 16:12 -0700, Eric wrote: > > Thank you for your input. I tried what you suggested by first just > > trying to loop through the data like so: > > > " > > test_output = 0 > > for obj in serializers.deserialize('json', gantt_data)['ganttgroups']: > > test_output = test_output + 1 > > " > > > This generated the following error: > > > "'generator' object is unsubscriptable" > > Huh. Okay. I didn't realize deserialize would return a generator. > > > I tried changing it slightly, moving "['ganttgroups']" inside the > > brackets, to this: > > > " > > test_test_output = 0 > > for obj in serializers.deserialize('json', gantt_data['ganttgroups']): > > test_output = test_output + 1 > > " > > > This generated the error I originally received: > > > "string indices must be integers" > > Yes. Now you're trying to subscript gantt_data before you deserialize > it. As you know, gantt_data is a json string. Hence the error. > > > I am just so new to this that I'm not sure where to go from here. Do > > you have any other suggestions as to what I may be doing wrong? > > Again, any help with this would be greatly appreciated. > > Well, the first thing you need to do is figure out what you have to work > with. You know now that deserializer returns a generator, so try > looping over it to see what it yields each time around: > > for obj in serializers.deserialize('json', gantt_data): > print '---' > print type(obj) > print obj > > That should give you a hint how to proceed. If you need more clues, > then add: > > print dir(obj) > print help(obj) > > That will give you some hints as to what you can do with obj. > > > > > On Sep 3, 1:09 pm, "J. Cliff Dyer" <j...@sdf.lonestar.org> wrote: > > > I suspect your error is hiding in <loop logic here>. What do you expect > > > obj to be? Your JSON should return a big dictionary with one key > > > ("ganttgroups"). When you iterate over a dictionary in python, you get > > > the keys of that dictionary. In this case, the string "ganttgroups". > > > You may be doing the following: > > > > for obj in serializers.deserialize("json", gantt_data): > > > do_something_to(obj['gantts']) > > > > which returns an error, because it evaluates to "ganttgroups"['gantts'] > > > (which would give you the error you see. > > > > What you want is more like: > > > > for obj in serializers.deserialize('json', gantt_data)['ganttgroups']: > > > start = obj['start'] > > > for gantt in obj['gantts']: > > > for row in gantt['rows']: > > > print row['own'] > > > > In short, you're getting your dicts and lists mixed up, or your keys and > > > values. > > > > Cheers, > > > Cliff > > > > On Wed, 2009-09-02 at 10:40 -0700, Eric wrote: > > > > I forgot to mention that I am trying to deserialize the data as > > > > follows: > > > > > " > > > > ... > > > > gantt_data = request.POST.get('ganttdata') > > > > > for obj in serializers.deserialize("json", gantt_data): > > > > <loop logic here> > > > > ... > > > > " > > > > > On Sep 2, 10:37 am, Eric <elezo...@gmail.com> wrote: > > > > > Hi, > > > > > I am attempting to parse a json string passed to my view via a form > > > > > post. A simple example of my json structure is as follows (indented > > > > > for readability): > > > > > > { > > > > > "ganttgroups":[ > > > > > { > > > > > "gantts":[ > > > > > { > > > > > "rows":[ > > > > > {"stt":1, "end":2, "ttl":"test row - gr1 ga1 > > > > > ta1", "own":"Tim Johnson"}, > > > > > {"stt":2, "end":3, "ttl":"my row (g1 t2)", > > > > > "own":"John Doe"}, > > > > > {"stt":1, "end":2, "ttl":"test row - gr1 ga1 > > > > > ta3", "own":"Mary Smith"} > > > > > ] > > > > > }, > > > > > { > > > > > "rows":[ > > > > > {"stt":1, "end":2, "ttl":"My 4th task", > > > > > "own":"Eric Johnson"}, > > > > > {"stt":1, "end":2, "ttl":"my row (g2 t2)", > > > > > "own":"Jeff Smith"}, > > > > > {"stt":1, "end":2, "ttl":"test row - gr1 ga2 > > > > > t3", "own":"Bill Baker"} > > > > > ] > > > > > } > > > > > ], > > > > > "start":"2009-1-01" > > > > > } > > > > > ,{ > > > > > "gantts":[ > > > > > { > > > > > "rows":[ > > > > > {"stt":1, "end":2, "ttl":"row - gr2 ga1 t1", > > > > > "own":"Ted Tillman"}, > > > > > {"stt":1, "end":2, "ttl":"row - gr2 ga1 t2", > > > > > "own":"Kim Crane"}, > > > > > {"stt":1, "end":2, "ttl":"row - gr2 ga1 t3", > > > > > "own":"Bob Barker"} > > > > > ] > > > > > } > > > > > ], > > > > > "start":"2009-1-01" > > > > > } > > > > > ] > > > > > > } > > > > > > I would like to parse it so that I can loop over the pairs/arrays to > > > > > access the data. When I try to deserialize the data, I get the django > > > > > error "string indices must be integers". Can anybody please help me > > > > > determine what exactly this means and how I may fix this? Is there > > > > > another method I should be using? I am obviously a bit of a newbie at > > > > > this so any help would be greatly appreciated. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---