private void parseDependenciesFromJson(Node node) {
        NodeMapper mapper = new NodeMapper();
        ObjectNode root = node.expectObjectNode();
        root.warnIfAdditionalProperties(TOP_LEVEL_PROPERTIES);
        // Must define a version.
        root.expectStringMember(VERSION).expectOneOf("1.0");
        // Must define a list of dependencies, each an ObjectNode.
        for (ObjectNode value : root.expectArrayMember(DEPENDENCIES).getElementsAs(ObjectNode.class)) {
            value.warnIfAdditionalProperties(ALLOWED_SYMBOL_PROPERTIES);
            SymbolDependency.Builder builder = SymbolDependency.builder();
            builder.packageName(value.expectStringMember(PACKAGE_NAME).getValue());
            builder.version(value.expectStringMember(VERSION).getValue());
            value.getStringMember(DEPENDENCY_TYPE).ifPresent(v -> builder.dependencyType(v.getValue()));
            value.getObjectMember(PROPERTIES).ifPresent(properties -> {
                for (Map.Entry<String, Node> entry : properties.getStringMap().entrySet()) {
                    Object nodeAsJavaValue = mapper.deserialize(entry.getValue(), Object.class);
                    builder.putProperty(entry.getKey(), nodeAsJavaValue);
                }
            });
            addDependency(builder.build());
        }
    }
Loads predefined dependencies from a JSON file (for example, to track
known dependencies used by generated code at runtime).

<pre>
{@code
DependencyTracker tracker = new DependencyTracker();
tracker.addDependenciesFromJson(getClass().getResource("some-file.json"));
}
</pre>

@param jsonFile URL location of the JSON file.
smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/DependencyTracker.java