2016-10-25 6 views
1

Я пытаюсь создать JSON программно для метода POST без жесткого кодирования имени ключа, поскольку это может быть что угодно.Как программировать JSON в Angular 2

В настоящий момент я жестко кодирую JSON, который подходит для тестирования, по крайней мере, я знаю, что мой метод POST работает правильно.

Для тестирования это мой текущий JSON, но он может иметь несколько уровней.

var jsonFormObj = { 
     'Name': value, 
     'Number': value, 
     'Url': value, 
     'Children': [ 
      { 
       'ChildName': value, 
       'ChildNumber': value 
      } 
     ] 
    } 

С многоуровневого OBJ

var jsonFormObj = { 
     'Name': value, 
     'Number': value, 
     'Url': value, 
     'Children':{ 
      'ChildName': value, 
      'ChildNumber': value, 
      'Addresses' : [{ 
        'Line 1': value, 
        'Line 2': value.. 
       }] 
     } 
    } 

Textarea ngFor HTML:

<div *ngFor="let inputSearch of searchBoxCount" class="col-sm-12"> 
    <textarea name="{{inputSearch.name}}" id="{{inputSearch.name}}" rows="2" [(ngModel)]="inputSearch.value" [class.hidden]="checkedUsers.indexOf(inputSearch.name) >= 0"></textarea> 
</div> 

я попробовал этот подход, однако он создал плоский JSON, чем вложенные как в примере выше.

let jsonData = {}; let jsonFormObj; 

    this.searchBoxCount.forEach((inputSearch: any) => { 
     if (inputSearch.value != null && (inputSearch.value != "")) { 
      let inputValues: any = inputSearch.value; 
      var dataNameElement = inputSearch.name; 
      jsonData[dataNameElement] = inputSearch.value; 
     } 
    }); 

    jsonFormObj.push(jsonData); 

Rendering TextArea:

var searchParams = []; 
for (var key in prop) { 
    if (prop.hasOwnProperty(key)) { 
    if (prop[key].type && prop[key].type != 'array') { 
     console.log("Normal FIELD.. "+ key); 
     var object = {name: key}; 
     searchParams.push(object); 
    } else if (prop[key].type && prop[key].type === 'array') { 
     console.log("ARRAY HERE TO SHOW 'ADD' BUTTON.. "+ key); 
     this.arrObj = true; 
    }else if (!prop[key].type) { 
     console.log("NOT FIELD, BUT OBJECT.. "+ key); 
     let objKeyProp = apiDefinition[prop[key].$ref.split('/')[2]].properties 
     for(var obj in objKeyProp){ 
     if(objKeyProp.hasOwnProperty(obj)){ 
      object = {name: obj}; 
       searchParams.push(object); 
      } 
     } 
    }         
    } 
} 
this.searchBoxCount = searchParams; 

Результат выше:

enter image description here

Как я могу создать такой JSON программно? поскольку hardcoding не является мнением вообще, поскольку objs различны каждый POST API.

Желаемый результат, это работает, потому что я жестко закодировал JSON.

enter image description here

ответ

0

Вы можете увидеть, если я правильно здесь:

Я считаю, что вы пытаетесь сделать, это, взять данные из HTML формы и сохранять их в виде массив, а затем вставляя его в объект json. Если это так, тогда вы всегда получите плоскую структуру JSON. Для того, чтобы получить динамическую вложенную структуру JSON, вам нужно будет разработать ng-модель в вашей форме в соответствии с вашим дизайном.

formObject.name 
formObject.number 
formObject.url 
formObject.Children.ChildName 
formObject.Children.ChildNumber 
formObject.Children.Adresses.Line1 
formObject.Children.Adresses.Line2 

Если вы можете поймать дрифт, где я собираюсь с этим.

+0

а текстовое поле визуализируется с помощью 'ngFor *' см. Edit – nCore

 Смежные вопросы

  • Нет связанных вопросов^_^