как ссылаться на свойства объекта и сам объект в Jsonnet

Я пытаюсь создать объект, подобный следующему в Jsonnet, но я не смог найти способ представить его в Jsonnet.

"properties" :{
  "a" : "value for a",
  "b" : "value for b",
  ...
  "nested" : {
    "a" : "value for a",
    "b" : "value for b",
    ...
  }
}

В принципе, я ищу способ сослаться на следующую часть родительского объекта:

    "a" : "value for a",
    "b" : "value for b",
    ...

person Ali    schedule 29.11.2019    source источник


Ответы (1)


iiuc ваш вопрос, приведенный ниже код должен сделать это - по сути, используйте переменную, названную p в этом случае, чтобы перехватить properties self:

1-й ответ: одно вложенное поле:

{
  properties: {
    local p = self,
    a: 'value for a',
    b: 'value for b',
    nested: {
      a: p.a,
      b: p.b,
    },
  },
}

2-й ответ: много вложенных полей:

{
  // Also add entire `o` object as fields named from `field_arr`
  addNested(o, field_arr):: o {
    [x]: o for x in field_arr
  },
  base_properties:: {
    a: 'value for a',
    b: 'value for b',
  },
  // We can't "build" the object while looping on it to add fields,
  // so have it already finalized (`base_properties`) and use below
  // function to add the "nested" fields
  properties: $.addNested($.base_properties, ["n1", "n2", "n3"])
}
person jjo    schedule 29.11.2019
comment
Спасибо за решение. Как я могу ссылаться на все a: «значение для a», b: «значение для b» как на один объект? Причина этого в том, что это будет повторяться для 100 свойств, поэтому повторение имени свойства не будет для меня очень удобным способом сделать это. - person Ali; 29.11.2019