Je suis en désaccord avec les réponses ci-dessus. Le bâti de la librairie json en Python 2.7 est aussi rapide que simplejson mais sans ennuyeux refusé-à-être-fixe unicode bugs.
Voici un simple indice de référence (veuillez essayer ceci sur votre système):
import json
import simplejson
from timeit import repeat
NUMBER = 100000
REPEAT = 10
def compare_json_and_simplejson(data):
"""Compare json and simplejson - dumps and loads"""
compare_json_and_simplejson.data = data
compare_json_and_simplejson.dump = json.dumps(data)
assert json.dumps(data) == simplejson.dumps(data)
result = min(repeat("json.dumps(compare_json_and_simplejson.data)", "from __main__ import json, compare_json_and_simplejson",
repeat = REPEAT, number = NUMBER))
print " json dumps {} seconds".format(result)
result = min(repeat("simplejson.dumps(compare_json_and_simplejson.data)", "from __main__ import simplejson, compare_json_and_simplejson",
repeat = REPEAT, number = NUMBER))
print "simplejson dumps {} seconds".format(result)
assert json.loads(compare_json_and_simplejson.dump) == data
result = min(repeat("json.loads(compare_json_and_simplejson.dump)", "from __main__ import json, compare_json_and_simplejson",
repeat = REPEAT, number = NUMBER))
print " json loads {} seconds".format(result)
result = min(repeat("simplejson.loads(compare_json_and_simplejson.dump)", "from __main__ import simplejson, compare_json_and_simplejson",
repeat = REPEAT, number = NUMBER))
print "simplejson loads {} seconds".format(result)
print "Complex real world data:"
COMPLEX_DATA = {'status': 1, 'timestamp': 1362323499.23, 'site_code': 'testing123', 'remote_address': '212.179.220.18', 'input_text': u'ny monday for less than \u20aa123', 'locale_value': 'UK', 'eva_version': 'v1.0.3286', 'message': 'Successful Parse', 'muuid1': '11e2-8414-a5e9e0fd-95a6-12313913cc26', 'api_reply': {"api_reply": {"Money": {"Currency": "ILS", "Amount": "123", "Restriction": "Less"}, "ProcessedText": "ny monday for less than \\u20aa123", "Locations": [{"Index": 0, "Derived From": "Default", "Home": "Default", "Departure": {"Date": "2013-03-04"}, "Next": 10}, {"Arrival": {"Date": "2013-03-04", "Calculated": True}, "Index": 10, "All Airports Code": "NYC", "Airports": "EWR,JFK,LGA,PHL", "Name": "New York City, New York, United States (GID=5128581)", "Latitude": 40.71427, "Country": "US", "Type": "City", "Geoid": 5128581, "Longitude": -74.00597}]}}}
compare_json_and_simplejson(COMPLEX_DATA)
print "\nSimple data:"
SIMPLE_DATA = [1, 2, 3, "asasd", {'a':'b'}]
compare_json_and_simplejson(SIMPLE_DATA)
Et les résultats sur mon système (Python 2.7.4, Linux 64 bits):
Complexe des données du monde réel:
json décharges 1.56666707993 secondes
simplejson décharges 2.25638604164 secondes
json charges 2.71256899834 secondes
simplejson charges 1.29233884811 secondes
De données Simple:
json décharges 0.370109081268 secondes
simplejson décharges 0.574181079865 secondes
json charges 0.422876119614 secondes
simplejson charges 0.270955085754 secondes
Pour le dumping, json
plus rapide que de l' simplejson
(mais pas par un ordre de grandeur).
Pour le chargement, simplejson
est plus rapide (mais pas par un ordre de grandeur).
Depuis que je suis en train de construire un service web, dumps()
qui est plus important-et à l'aide d'une bibliothèque standard est toujours préféré.
Aussi, cjson
n'a pas été mis à jour dans les 4 dernières années, je ne voudrais pas y toucher.