                     }
                 }
             } else {
-                throw QJsonError.access(path: self.buildPath(subpaths: subpaths, from: 0, to: subpathIndex))
+                throw QJsonError.access(path: self.buildPath(subpaths, from: 0, to: subpathIndex))
             }
             subpathIndex += 1
             prevRoot = root
         }
+    }
+
+    private func buildPath(_ subpaths: [Any?]) -> String {
+        return self.buildPath(subpaths, from: subpaths.startIndex, to: subpaths.endIndex)
+    }
+
+    private func buildPath(_ subpaths: [Any?], from: Int, to: Int) -> String {
+        var path = self.basePath
+        Array< Any? >(subpaths[from..<to]).forEach({
+            guard let item = $0 else { return }
+            if let string = item as? String {
+                if path.count > 0 {
+                    path.append(".\(string)")
+                } else {
+                    path.append(string)
+                }
+            } else if let number = item as? NSNumber {
+                path.append("[\(number)]")
+            } else if let number = item as? UInt {
+                path.append("[\(number)]")
+            } else if let number = item as? Int {
+                path.append("[\(number)]")
+            }
+        })
+        return path
     }
 
     private struct Const {

        var index: Int = 0
        let jsonDictionary = NSMutableDictionary()
        for item in value {
            let subpath = self.buildPath(path: path, key: item.key)
            guard let jsonKey = try item.key.toJsonValue(path: subpath) as? NSCopying else {
                throw QJsonError.cast(path: subpath)
            }

                    }
                    root = mutable
                } else {
                    throw QJsonError.access(path: self.buildPath(subpaths, from: 0, to: subpathIndex))
                }
                if subpathIndex == subpaths.endIndex - 1 {
                    if let value = value {
