is json.loads() the fastest way to convert a string to a dictionary?

Viewed 143

I'm trying to quickly convert a string to a dictionary. json.loads() seems to be > 10 faster than eval(). I have also tried ast.literal_eval() and yaml.loads() which are also much slower. Are there any quicker options? Could a custom C++ function implemented via cython be much faster or is json.loads() mostly optimized already?

import time, json
msg = '[{"ev":"Q","sym":"TODAY","c":1,"bx":19,"ax":12,"bp":432.55,"ap":432.56,"bs":6,"as":1,"t":1643310960406,"q":114456090,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":19,"ax":10,"bp":432.54,"ap":432.55,"bs":1,"as":1,"t":1643310960406,"q":114455883,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":8,"ax":10,"bp":432.54,"ap":432.55,"bs":1,"as":1,"t":1643310960406,"q":114455887,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":19,"ax":10,"bp":432.54,"ap":432.55,"bs":1,"as":1,"t":1643310960406,"q":114455888,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":19,"ax":10,"bp":432.54,"ap":432.55,"bs":2,"as":1,"t":1643310960406,"q":114455890,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":19,"ax":12,"bp":432.54,"ap":432.55,"bs":2,"as":1,"t":1643310960406,"q":114455895,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":10,"ax":12,"bp":432.54,"ap":432.55,"bs":3,"as":1,"t":1643310960406,"q":114455901,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":10,"ax":12,"bp":432.54,"ap":432.55,"bs":8,"as":1,"t":1643310960406,"q":114455907,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":10,"ax":12,"bp":432.54,"ap":432.55,"bs":9,"as":1,"t":1643310960406,"q":114455917,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":10,"ax":12,"bp":432.54,"ap":432.55,"bs":6,"as":1,"t":1643310960406,"q":114455918,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":19,"ax":12,"bp":432.55,"ap":432.56,"bs":7,"as":2,"t":1643310960406,"q":114456110,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":11,"ax":12,"bp":432.54,"ap":432.55,"bs":3,"as":1,"t":1643310960406,"q":114455919,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":11,"ax":21,"bp":432.54,"ap":432.56,"bs":3,"as":1,"t":1643310960406,"q":114455921,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":10,"ax":21,"bp":432.54,"ap":432.56,"bs":6,"as":1,"t":1643310960406,"q":114455924,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":10,"ax":21,"bp":432.55,"ap":432.56,"bs":5,"as":1,"t":1643310960406,"q":114455933,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":8,"ax":12,"bp":432.55,"ap":432.56,"bs":7,"as":2,"t":1643310960407,"q":114456132,"z":1},{"ev":"Q","sym":"TODAY","c":1,"bx":8,"ax":12,"bp":432.55,"ap":432.56,"bs":9,"as":2,"t":1643310960407,"q":114456134,"z":1}]'

start = time.perf_counter()

for n in range(0,1000):
  msg2 = json.loads(msg)
end = time.perf_counter()

print(end-start)
 
0 Answers
Related