def parseJSON(js):
        """
        {
            kv_type : "",
            type    : "",
            actors  : <Actors list>
                [
                    {
                     actorName : <String>,
                     formula: <String>,
                     events: ["->b", "b->"],
                     trace: [],
                     speed: 1,2,3...
                    }
                ]
        }
        :param json:
        :return:
        """
        decoded = json.JSONDecoder().decode(js)
        actors = decoded.get("actors")
        if actors is None:
            raise Exception("No actors found in the system !")
        s = System()
        for a in actors:
            # Getting actor info
            a_name = a.get("name")
            a_formula = a.get("formula")
            a_trace = a.get("trace")
            sa_events = a.get("events")
            a_events = []
            a_speed = 1 if a.get("speed") is None else int(a["speed"])

            # Parsing actor info
            for e in sa_events:
                tmp = e.split("|")
                tmp2 = []
                for x in tmp:
                    tmp2.append(Actor.Event.parse(x))
                a_events.append(tmp2)
            a_formula = eval(a_formula)
            a_trace = Trace.parse(a_trace)

            # Creating the actor
            actor = Actor(name=a_name, formula=a_formula, trace=a_trace, events=a_events, speed=a_speed)

            # Add actor to the system
            s.add_actors(actor)
        s.generate_monitors()
        return s