     
     public func evaluateForArray() throws -> Array<[String:Any]> {
         // dematerialize() throw error if failure  
-        let value = try self.dematerialize()
+        let value:Any = try self.dematerialize()
         guard let ary = value as? Array<[String:Any]> else {
-            throw PBError.jsonParseError(info:value)
+            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
     }

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

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