Как преобразовать строку шаблона в JSON в angular? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть этот код в моем файле ty:

onSubmit(form: NgForm){
console.log('Executado')
let dados = `
  name: ${form.value.name},
  email: ${form.value.email},
  specialty: ${form.value.specialty},
  password:${form.value.password}

  `;
  this.http.post(`${ this.apiURL }/auth/register_lawyer`, dados)
        .subscribe(
          resultado => {
            console.log(resultado)
          },
          erro => {
            if(erro.status == 400) {
              console.log(erro);
            }
          }
        )
}

Как я могу преобразовать полученные в форме дадо в файл JSON? что-то вроде:

   dados ={
"name":"Andrew",
"email":"teste@hotmail.com",
"specialty":"developer,
"password":"1234"

}

Я хочу передать додо в форме JSON через Post в мой API. Но я искал и ничего не нашел. Я пытался использовать JSON .stringfy, но не сработало.

1 Ответ

0 голосов
/ 25 апреля 2020

Ваша строка dados недопустима JSON, поскольку она не соответствует JSON правилам форматирования (например, все ключи должны быть в двойных кавычках, все строки должны быть разделены, и т. Д. c). Не используйте строки-шаблоны для создания JSON данных, потому что вам нужно будет обрабатывать такие вещи, как экранирование строк и тому подобное.

Измените код, чтобы сначала создать DTO object, а затем, если вы все еще хотите вашу dados шаблонную строку, а затем создайте ее отдельно. Чтобы избежать повторения, вы можете использовать функцию для генерации строки, перечисляя свойства DTO.

const dto = {
    name     : form.value.name,
    email    : form.value.email,
    specialty: form.value.specialty,
    password : form.value.password
};

const url = `${ this.apiURL }/auth/register_lawyer`;
this.http.post( url, dto )    // <-- Passing a JavaScript `object` will automatically be converted to JSON by Angular: https://angular.io/guide/http#making-a-post-request
    .subscribe( resultado => {
        console.log(resultado)
        },
        erro => {
            if(erro.status == 400) {
                console.log(erro);
            }
        }
    );

const dados = `
    name: ${dto.name},
    email: ${dto.email},
    specialty: ${dto.specialty},
    password:${dto.password}
`;

Если вы хотите создать множество этих dados строк (, которые не JSON), возможно, для целей ведения журнала? (честно, не знаю), сделайте так:

function createTextThatIsNotJson( obj ) {

    let text = "";
    for( const key in obj ) {
        if( text.length > 0 ) text += ",\r\n";
        text += "    " + key + ": " + obj[key];
    }
    return text;
}

const dados = createTextThatIsNotJson( dto );
...