2

jsonnet のリストの値を置き換える方法。このような基本的な例はうまくいかないようです:

local users = import "../data/users.json";

// replace dots in username
local users_new = [
  u + { replaced_username: std.strReplace(u.username, ".", "_") }
  for u in users
];

{
  data: {
    [user.replaced_username]: {
      username: user.username,
    } for user in users_new
  }
}

エラーメッセージは次のようになります。

RUNTIME ERROR: Field does not exist: strReplace
    templates/users.jsonnet:5:32-45 object <anonymous>
    templates/users.jsonnet:11:17-38    thunk <b>
    std.jsonnet:148:27  thunk <vals>
    std.jsonnet:611:21-24
    std.jsonnet:611:12-25   thunk <a>
    std.jsonnet:611:12-36   function <anonymous>
    std.jsonnet:611:12-36   function <anonymous>
    std.jsonnet:148:13-28   function <anonymous>
    templates/users.jsonnet:11:10-38    object <anonymous>
    During manifestation

エラーメッセージからわかるように、キーに計算値を使用できませんか、それともここで何か見逃していますか?

UPD:std.strReplace関数が jsonnet バージョン 0.9.5 に存在しないことが判明しました。その関数をテンプレートにコピーすることで問題が解決しました。

4

1 に答える 1