yes. I've set: response.view = 'generic.json' applications/welcome/views/generic.json (for me) contains only: {{from gluon.serializers import json}}{{=XML(json(response._vars))}}
Thanks for reminding me of as_dict(), it never even occurred to me to use it here. On Monday, May 28, 2012 2:47:09 PM UTC-5, Anthony wrote: > > You can do: > > return dict(person = db.person(id).as_dict()) > > See http://web2py.com/books/default/chapter/29/6#as_dict-and-as_list. > > Are you using the generic.json view? If so, it passes the returned value > to gluon.serializers.json, which should automatically call the as_dict() > method of the Row object. Alternatively, you could import > gluon.serializers.json and use it directly. > > Anthony > > On Monday, May 28, 2012 2:05:57 PM UTC-4, G. Clifford Williams wrote: >> >> I was migrating some of the ReST APIs that I'd hand-rolled over to the >> new(?) ReST facilities in web2py and noticed while going through the >> examples ( >> http://web2py.com/books/default/chapter/29/10#Restful-Web-Services) that >> JSON serialization kept failing. I'm using 1.99.7. >> >> It looks like the problem is all of the functions (lambda and methods) >> attached to each dal object passed to the view: >> >> TRACEBACK >> >> 1. >> 2. >> 3. >> 4. >> 5. >> 6. >> 7. >> 8. >> 9. >> 10. >> 11. >> 12. >> 13. >> 14. >> 15. >> 16. >> >> Traceback (most recent call last): >> File "/Users/prog/web2py/generic/gluon/restricted.py", line 205, in >> restricted >> exec ccode in environment >> File >> "/Users/prog/web2py/generic/applications/resttest/views/generic.json", line >> 2, in <module> >> File "/Users/prog/web2py/generic/gluon/serializers.py", line 61, in json >> return json_parser.dumps(value,default=default) >> File >> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", >> line 238, in dumps >> **kw).encode(obj) >> File >> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", >> line 201, in encode >> chunks = self.iterencode(o, _one_shot=True) >> File >> "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", >> line 264, in iterencode >> return _iterencode(o, 0) >> File "/Users/prog/web2py/generic/gluon/serializers.py", line 37, in >> custom_json >> raise TypeError(repr(o) + " is not JSON serializable") >> TypeError: <function <lambda> at 0x100e70500> is not JSON serializable >> >> I first wrote a filter to weed out functions which was useful in getting >> the examples to work but was much more involved than required to solve my >> use case. In the end I went with a list comprehension containing only the >> fields that I needed. Instead of: >> >> return dict(person = db.person(id)) >> >> I used something like: >> return dict([(field,db.person(id)[field]) for field in ['name', 'id', >> 'info']]) >> >> >> Has anyone ever gotten the examples working without using such tricks? it >> took a while for me to get from 1.95.x up to 1.99.x so I don't know whether >> my experience is unique or due to a code change. >> >> Thanks. >> >> >>