<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def compute_json(self, build_context):
 """Compute and store a JSON serialization of this target for caching purposes. The serialization includes: - The build flavor - The builder name - Target tags - Hashes of target dependencies & buildenv - Processed props (where target props are replaced with their hashes, and file props are replaced with mapping from file name to its hash) It specifically does NOT include: - Artifacts produced by the target The target name is currently included, although it would be better off to leave it out, and allow targets to be renamed without affecting their caching status (if it's just a rename). It is currently included because it's the easy way to account for the fact that when cached artifacts are restored, their path may be a function of the target name in non-essential ways (such as a workspace dir name). """

        props = {}
        test_props = {}
        for prop in self.props:
            if prop in self._prop_json_blacklist:
                continue
            sig_spec = Plugin.builders[self.builder_name].sig.get(prop)
            if sig_spec is None:
                continue
            if prop in self._prop_json_testlist:
                test_props[prop] = process_prop(sig_spec.type,
                                                self.props[prop],
                                                build_context)
            else:
                props[prop] = process_prop(sig_spec.type, self.props[prop],
                                           build_context)
        json_dict = dict(
            # TODO: avoid including the name in the hashed json...
            name=self.name,
            builder_name=self.builder_name,
            deps=hashify_targets(self.deps, build_context),
            props=props,
            buildenv=hashify_targets(self.buildenv, build_context),
            tags=sorted(list(self.tags)),
            flavor=build_context.conf.flavor,  # TODO: any other conf args?
            # yabt_version=__version__,  # TODO: is this needed?
        )
        json_test_dict = dict(
            props=test_props,
        )

        self._json = json.dumps(json_dict, sort_keys=True, indent=4)
        self._test_json = json.dumps(json_test_dict, sort_keys=True, indent=4)