Validator: only a typo, I have used IS_JSON()

Without json.dumps / json.loads: same results.
In my emails I have shown a simplified code. This is a part of the real
code:

---------------------------------------------------------------
*db.py:*

db.define_table("antworten",
....
    Field('nn','json', requires=IS_JSON()),
    )

---------------------------------------------------------------
*This function writes to the database:*

def testantworten0():
    d={"f":"testantworten2", "vars":dict(x=3)}
    print str(d),* type(d["f"])*
    v=db.antworten.insert( nn=d, )
    return dict(form=v)

The result of the print statement:
{'vars': {'x': 3}, 'f': 'testantworten2'}* <type 'str'>*

---------------------------------------------------------------
*This function reads from the database:*

def antwortAuswerten(typ, antwort, absender='%', doNext=False):
    q=db((db.antworten.typ==typ) & db.antworten.absender.like(absender))
    for res in q.select():
        print res.nn, type(res.nn)
        print res.nn['f'],* type(res.nn['f'])*

And it prints:

{u'vars': {u'x': 3}, u'f': u'testantworten2'} <type 'dict'>
testantworten2* <type 'unicode'>*

---------------------------------------------------------------

I put a dict with a *str* into my table and I get back a *unicode.*
Is this the expected behavior?




2014-03-30 20:02 GMT+02:00 Anthony <abasta...@gmail.com>:

> First, you don't need to explicitly specify the validator, but if you do,
> it should be IS_JSON(). Second, once you select a record, you do not need
> to pass the resulting value to json.loads() -- web2py will automatically
> convert the stored JSON value to a Python object (that's the point of the
> JSON field type).
>
> Anthony
>
>
> On Sunday, March 30, 2014 12:59:11 PM UTC-4, mweissen wrote:
>
>> Sorry, I did not test all cases.
>> E.g.:
>>
>> Field ('url', 'json', requires=IS_JSON)
>> ...
>> res = db(db.mydb.id==1).select().first()
>> print json.loads(res.url)
>>
>>
>> Again res.url is something like
>>  {'u'f : u'testfunction' ... }
>>
>> and URL(**res.url) fails.
>>
>>
>>
>> 2014-03-30 18:21 GMT+02:00 Martin Weissenboeck <mweis...@gmail.com>:
>>
>>> That's the answer! I have forgotten the "json" type parameter, I had
>>> only  requires=IS_JSON()
>>> I have tried it again and now it works. Thank you!
>>>
>>>
>>>
>>>
>>> 2014-03-30 15:10 GMT+02:00 Anthony <abasta...@gmail.com>:
>>>
>>> Have you tried:
>>>>
>>>> Field('url', 'json')
>>>>
>>>> Anthony
>>>>
>>>> On Saturday, March 29, 2014 7:11:34 PM UTC-4, mweissen wrote:
>>>>
>>>>> Let's say I have
>>>>>     URL(f="myfunction", vars=dict(x=1))
>>>>> or
>>>>>     v = {"f":"myfunction", "vars":{"x":1}}
>>>>>     URL(**v)
>>>>>
>>>>> That works fine.
>>>>>
>>>>> Now I do
>>>>>     j = json.dumps(v)
>>>>>
>>>>> I store j in
>>>>>     Field("url", requires=IS_JSON())
>>>>>
>>>>> Now I read this field and call URL(**fieldvalue). I get an error:
>>>>>
>>>>> <type 'exceptions.SyntaxError'> when calling URL, function or function
>>>>> name required
>>>>>
>>>>> The fieldvalue I get is
>>>>>     {'u'f : u'festfunction' ... }
>>>>>
>>>>> The key is a unicode string and not utf-8 coded.
>>>>>
>>>>> What is wrong? How can I get an utf-8 string?
>>>>>
>>>>> Regards, Martin
>>>>>
>>>>>
>>>
>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to