<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def json_describe(o, fqdn, descriptor=None):
 """Describes the specified object using the directives in the JSON `descriptor`, if available. Args: o: object to describe. fqdn (str):
 fully-qualified domain name of the object. descriptor (dict):
 keys are attributes of `o`; values are transform functions to apply to the attribute so that only a single value is returned. Returns: dict: keys are specific attributes tailored to the specific object type, though `fqdn` is common to all descriptions; values are the corresponding attribute values which are *simple* types that can easily be serialized to JSON. """

    if descriptor is None or not isinstance(descriptor, dict):
        return {"fqdn": fqdn}
    else:
        result = {"fqdn": fqdn}
        for attr, desc in descriptor.items():
            if attr == "instance":
                #For instance methods, we repeatedly call instance methods on
                #`value`, assuming that the methods belong to `value`.
                value = o
            else:
                if '.' in attr:
                    #We get the chain of attribute values.
                    value = o
                    for cattr in attr.split('.'):
                        if hasattr(value, cattr):
                            value = getattr(value, cattr, "")
                        else:
                            break
                else:
                    #There is just a one-level getattr.    
                    value = getattr(o, attr, "")
                
            if "transform" in desc:
                for transform in desc["transform"]:
                    if "numpy" == transform[0:len("numpy")]:
                        value = _numpy_transform(transform, value)
                    elif "scipy" == transform[0:len("scipy")]:
                        value = _scipy_transform(transform, value)
                    elif "math" == transform[0:len("math")]:
                        value = _math_transform(transform, value)
                    elif "self" in transform:
                        args = desc["args"] if "args" in desc else []
                        kwds = desc["kwargs"] if "kwargs" in desc else {}
                        method = transform[len("self."):]
                        value = _instance_transform(method, value, *args,**kwds)
                        
            if "slice" in desc:
                for si, sl in enumerate(desc["slice"]):
                    if ':' in sl:
                        name, slice = sl.split(':')
                    else:
                        name, slice = str(si), sl

                    slvalue = value
                    for i in map(int, slice.split(',')):
                        slvalue = slvalue[i]
                        
                    result[name] = _array_convert(slvalue)
            else:
                if "rename" in desc:
                    result[desc["rename"]] = _array_convert(value)
                else:
                    result[attr] = _array_convert(value)
                
    return result