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

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

    
    public func evaluateForArray() throws -> Array<[String:Any]> {
        // dematerialize() throw error if failure  
        let value:Any = try self.dematerialize()
        guard let ary = value as? Array<[String:Any]> else {
            if let v = value as? String {
                throw PBError.jsonParseError(reason: "is not array", info:v)
            } else {
                throw PBError.jsonParseError(reason: "is not array", info:value)
            }
        }
        return ary
    }
