diff --git a/include/uzuki2/parse_json.hpp b/include/uzuki2/parse_json.hpp
index 060a3da..2dde78c 100644
--- a/include/uzuki2/parse_json.hpp
+++ b/include/uzuki2/parse_json.hpp
@@ -234,7 +234,8 @@ std::shared_ptr parse_object(const millijson::Base* contents, Externals& e
}
}
- const auto& lvals = extract_array(map, "levels", path);
+ const std::string levels_name = "levels"; // avoid dangling reference from casting of string literal.
+ const auto& lvals = extract_array(map, levels_name, path);
int32_t nlevels = lvals.size();
auto fptr = process_array_or_scalar_values(map, path, [&](const auto& vals, bool named, bool scalar) -> auto {
auto ptr = Provisioner::new_Factor(vals.size(), named, scalar, nlevels, ordered);
@@ -365,7 +366,8 @@ std::shared_ptr parse_object(const millijson::Base* contents, Externals& e
auto names_ptr = has_names(map, path);
bool has_names = names_ptr != NULL;
- const auto& vals = extract_array(map, "values", path);
+ const std::string values_name = "values"; // avoid dangling reference from casting of string literal.
+ const auto& vals = extract_array(map, values_name, path);
auto ptr = Provisioner::new_List(vals.size(), has_names);
output.reset(ptr);