2013-04-26 5 views
8

ऐसा लगता है कि वे बिल्कुल वही व्यवहार कर रहे हैं।json.dumps/loads और tornado.escape.json_encode/json_decode के बीच क्या अंतर है?

>>> 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'] 

उत्तर

13

कभी कभी यह the source code पढ़ने के लिए उपयोगी होता है:

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 ज्यादातर अजगर 3.x के लिए आवश्यक है value सुनिश्चित करने के लिए str, नहीं bytes टाइप किया है, क्योंकि json.loads बाद से निपटने के नहीं कर सकते ।

संबंधित मुद्दे