This is probably pyDAL bug, you should still get a dictionary. I say probably because I don't really use google app engine, and there's a chance that json was not supported at the time and so web2py used a text field and then made the conversion, and, nowadays it may be supported in which case it doesn't need to do the json parsing.
To fix this issue for yourself edit gluon/packages/dal/pydal/parsers/google.py to look like this
from ..adapters.google import GoogleDatastore
from .base import BasicParser, JSONParser
from . import parsers, for_type
@parsers.register_for(GoogleDatastore)
class GoogleDatastoreParser(BasicParser, JSONParser):
@for_type('id')
def _id(self, value):
return value
@for_type('boolean')
def _boolean(self, value):
return value
I would make a pull request with the fix, but, as I said, I'm not even sure this is a bug due to lack of familiarity with GAE. If you can confirm that this is a bug on our side (e.g. make a brand new GAE web2py application with json fields and check that they also return strings instead of a dict), then I'll gladly fix it in github.