{"record":{"id":"346dc8035aae98a0","repo":"apple/pkl","slug":"formatexception-resolveddependencies-object","errorCode":null,"errorMessage":"FormatException(\"resolvedDependencies\", \"object\", object.getClass())","messagePattern":"FormatException\\(\"resolvedDependencies\", \"object\", object\\.getClass\\(\\)\\)","errorType":"validation","errorClass":"FormatException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java","lineNumber":104,"sourceCode":"    var input = Files.readString(path);\n    return parse(input);\n  }\n\n  public static ProjectDeps parse(String input) throws JsonParseException {\n    var parsed = Json.parseObject(input);\n    var schemaVersion = parsed.getInt(\"schemaVersion\");\n    if (!supportedSchemaVersions.contains(schemaVersion)) {\n      throw new PackageLoadError(\"unsupportedProjectDepsVersion\", schemaVersion);\n    }\n    var resolvedDependencies =\n        parsed.get(\"resolvedDependencies\", ProjectDeps::parseResolvedDependencies);\n    return new ProjectDeps(resolvedDependencies);\n  }\n\n  private static EconomicMap<CanonicalPackageUri, Dependency> parseResolvedDependencies(\n      Object object) throws JsonParseException, URISyntaxException {\n    if (!(object instanceof JsObject jsObj)) {\n      throw new FormatException(\"resolvedDependencies\", \"object\", object.getClass());\n    }\n    var ret = EconomicMaps.<CanonicalPackageUri, Dependency>create(jsObj.size());\n    for (var entry : jsObj.entrySet()) {\n      Dependency resolvedDependency = parseResolvedDependency(entry);\n      var canonicalPackageUri = CanonicalPackageUri.of(entry.getKey());\n      ret.put(canonicalPackageUri, resolvedDependency);\n    }\n    return ret;\n  }\n\n  private static Dependency parseResolvedDependency(Entry<String, Object> entry)\n      throws JsonParseException {\n    var input = entry.getValue();\n    if (!(input instanceof JsObject obj)) {\n      throw new VmExceptionBuilder().evalError(\"invalid object\").build();\n    }\n    var type = obj.getString(\"type\");\n    var uri = obj.get(\"uri\", PackageUtils::parsePackageUriWithoutChecksums);","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java#L86-L122","documentation":"parseResolvedDependencies expects the 'resolvedDependencies' member of a ProjectDeps file to be a JSON object (JsObject). If it is any other JSON type (array, string, number), a FormatException names the field, the expected type 'object', and the actual class.","triggerScenarios":"ProjectDeps.parse on input whose resolvedDependencies value is not an object — e.g. hand-edited to an array or null.","commonSituations":"Manual edits to the deps file; a different tool or script rewriting the file with the wrong structure; truncation or merge conflicts corrupting the JSON shape.","solutions":["Restore resolvedDependencies to an object mapping package URIs to dependency objects","Regenerate the deps file via the Pkl project tooling instead of editing by hand","Validate the JSON structure before parsing"],"exampleFix":"// before\n\"resolvedDependencies\": []\n// after\n\"resolvedDependencies\": { \"package://example.com/foo@1\": { \"type\": \"remote\", \"uri\": \"...\", \"checksums\": {...} } }","handlingStrategy":"type-guard","validationCode":"Object rd = Json.parseObject(input).get(\"resolvedDependencies\");\nif (!(rd instanceof Map)) throw new IllegalArgumentException(\"resolvedDependencies must be an object\");","typeGuard":"boolean isObject(Object o) { return o instanceof Map<?, ?>; }","tryCatchPattern":"try { ProjectDeps.parse(input); } catch (FormatException e) { log.error(\"deps file malformed: {}\", e.getMessage()); }","preventionTips":["Never hand-edit the deps file structure","Regenerate via the Pkl CLI after conflicts or corruption","Validate JSON structure in CI before consuming"],"tags":["json","schema-validation"],"backgroundTag":"unexpected-response-shape","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}