jso nnet: как сериализовать массив в строку - PullRequest
0 голосов
/ 11 апреля 2020

Как преобразовать это ["a", "b", "c", "d"]

в

"a", "b", "c "," d "

в JSO NNET (https://jsonnet.org/ref/stdlib.html)

1 Ответ

1 голос
/ 11 апреля 2020

Существует функция std.toString, которая может вам понадобиться. Например, std.toString(["a", "b", "c", "d"]) приводит к строке ["a", "b", "c", "d"]. Это немного отличается от вашего примера вывода "a", "b", "c", "d".

Если вы хотите иметь именно тот формат, который вам нужен, вы, конечно, можете создать строку самостоятельно. Наиболее очевидным способом является написание рекурсивной функции (так вы итерируете в Jso nnet):

local arrayToString(arr) =
  local aux(arr, index) =
    // Assuming escapeStringJson is how you want to serialize
    // the elements. Of course you can use any other way
    // to serialize them (e.g. toString or manifestJson).
    local elem = std.escapeStringJson(arr[index]);
    if index == std.length(arr) - 1 then
      elem
    else
      elem + ", " + aux(arr, index + 1)
  ;
  aux(arr, 0);
arrayToString(["a", "b", "c", "d"])

Более идиоматическим способом c было бы использование map для преобразования всех элементов массива и затем присоединитесь, чтобы объединить их в одну строку:

local arrayToString(arr) = std.join(", ", std.map(std.escapeStringJson, arr));
arrayToString(["a", "b", "c", "d"])
...