[Javascript] JSON 데이터를 전송하는 기술
서버와, 또는 서버 사이에 데이터를 전송하는 대표적인 자바스크립트의 기술은 JSON입니다.
XML로 데이터를 교환하기도 하지만, 데이터 크기와 효율면에서 JSON이 더 좋기 때문에 JSON을 주로 사용해서 사실상 표준 데이터를 교환하게 됩니다.
1. 객체를 JSON 문자열로 변환
웹에서 자바스크립트로 생성하는 데이터는 주로 배열, 또는 객체입니다.
서버에 데이터를 전송하려면 이 배열, 또는 객체를 전송가능한 JSON 문자열로 변환을 해야 합니다.
let formData = {
memberInfo: [
{
"userId": 101,
"value": "라이언"
},
{
"userId": 108,
"value": "어피치"
},
{
"userId": 227,
"value": "콘"
}
]
}
객체를 전송하려면 객체를 문자열 형태로 변환해야 합니다.
전송을 위한 문자열 변환은 다음과 같이 합니다.
JSON.stringify(formData) // {"memberInfo":[{"userId":101,"value":"라이언"},{"userId":108,"value":"어피치"},{"userId":227,"value":"콘"}]}
HTML 폼에서 데이터를 생성할 때 자주 발생하는 문제가 undefined 값 문제입니다.
서버로 undefined를 그대로 전송하면 예기치 못한 에러를 발생시킬 수 있습니다. 문자열로 변환된 undefined 속성은 문자열에서 제외되기 때문에 서버에서 해당 속성을 접근할 때 에러가 발생하게 됩니다.
let formData = {
memberInfo: [
{
"userId": 101,
"value": "라이언"
},
{
"userId": 108,
"value": undefined
},
{
"userId": 227,
"value": "콘"
}
]
}
JSON.stringify(formData) // {"memberInfo":[{"userId":101,"value":"라이언"},{"userId":108},{"userId":227,"value":"콘"}]}
그래서 객체 데이터를 가공해서 데이터에 오류가 없도록 후처리를 한 후 문자열 변환을 해서 전송해야 합니다.
다음처럼 널리시(Nullish - undefined, null) 값은 빈 문자열로 변환을 한 후 JSON 문자열로 변환을 하면 됩니다.
let nFormData = {memberInfo: formData.memberInfo.map((user) => {
user.value = user.value ?? ''
return user
})}
console.log(JSON.stringify(nFormData)) // {"memberInfo":[{"userId":101,"value":"라이언"},{"userId":108,"value":""},{"userId":227,"value":"콘"}]}
2. 폼 데이터를 JSON 문자열로 변환
폼 데이터를 JSON 문자열로 전송하려면 FormData 객체로 폼 데이터 전체를 가져온 후 변환 루프문으로 처리를 해서 객체 배열로 가공을 해야 합니다.
const fd = new FormData(document.querySelector('#optionform'));
let arr = []
fd.forEach((value,key)=>{let obj = {};obj[key]=value??'';arr.push(obj)}) // 폼 데이터를 객체 배열로 변환
console.log(JSON.stringify({formData: arr})) // {"formData":[{"currpage":"1"},{"startdate":"2023-01-15"},{"enddate":"2023-01-22"},{"pagesize":"100"}]}