2013-04-26 3 views
8

Aynı şekilde davrandıkları görülüyor.json.dumps/load ile tornado.escape.json_encode/json_decode arasındaki fark nedir?

>>> data 
[('a', 'b'), {'a': 1, 'b': 2}, ['a', 'b'], 'a', 'b'] 
>>> json.dumps(data) 
'[["a", "b"], {"a": 1, "b": 2}, ["a", "b"], "a", "b"]' 
>>> tornado.escape.json_encode(data) 
'[["a", "b"], {"a": 1, "b": 2}, ["a", "b"], "a", "b"]' 
>>> json.loads(json.dumps(data)) 
[[u'a', u'b'], {u'a': 1, u'b': 2}, [u'a', u'b'], u'a', u'b'] 
>>> tornado.escape.json_decode(json.dumps(data)) 
[[u'a', u'b'], {u'a': 1, u'b': 2}, [u'a', u'b'], u'a', u'b'] 

cevap

13

Bazen the source code okumak yararlı olacaktır:

def json_encode(value): 
    return json.dumps(value).replace("</", "<\\/") 

def json_decode(value): 
    return json.loads(to_basestring(value)) 

def to_basestring(value): 
    if isinstance(value, _BASESTRING_TYPES): 
     return value 
    assert isinstance(value, bytes_type) 
    return value.decode("utf-8") 

to_basestring çoğunlukla str değil bytes yazın etti value sağlamak için piton 3.x için gereklidir, json.loads ikincisi başa çıkamaz, çünkü .