         case .httpResponseError(let statusCode, let info):
             return "httpResponseError \(statusCode) \(info)"
         case .nonHTTPURLResponse:
-            return "NoHTTPURLResponse"
-        case .jsonParseError(let info):
-            return "JSONParseError \(info)" 
+            return "nonHTTPURLResponse"
+        case .jsonParseError(let reason, let info):
+            return "jsonParseError \(reason)\(info)" 
         }
     }
 }

    case general(error:Error, info:Any)
    case httpResponseError(statusCode:Int, info:Any)
    case nonHTTPURLResponse
    case jsonParseError(info:Any)
    
    public var description:String {
        switch self {

        // dematerialize() throw error if failure  
        let value = try self.dematerialize()
        guard let dic = value as? [String:Any] else {
            if let v = value as? String {
                throw PBError.jsonParseError(reason: "is not dictionary", info:v)
            } else {
                throw PBError.jsonParseError(reason: "is not dictionary", info:value)
            }
        }
        return dic
    }
