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. 
>>
>>
>>

Reply via email to