- JSON(JavaScript Object Notation)은 속성-값 쌍(attribute–value pairs), 배열 자료형(array data types) 또는 기타 모든 시리얼화 가능한 값(serializable value) 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷입니다.
- 비동기 브라우저/서버 통신 (AJAX)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷입니다.
- 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있습니다.
- 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합합니다. - Wikipedia
const obj = {
name: 'harimad',
age: '10',
alive: true,
hobby: ['space', 'ocean']
}
const json = JSON.stringify(obj)
console.log(json) // {"name":"harimad","age":"10","alive":true,"hobby":["space","ocean"]}
const person = [
{ id: 1, name: "Kim", age: 20 },
{ id: 2, name: "Lee", age: 30 },
{ id: 3, name: "Park", age: 40 }
];
const json2 = JSON.stringify(person)
console.log(json2) // [{"id":1,"name":"Kim","age":20},{"id":2,"name":"Lee","age":30},{"id":3,"name":"Park","age":40}]
// JSON.parse() - 1
const obj3 = {
name: "Soo",
age: 20,
alive: true,
hobby: ["traveling", "piano"]
};
const json3 = JSON.stringify(obj3)
const parsed = JSON.parse(json3)
console.log(parsed) // {name: 'Soo', age: 20, alive: true, hobby: Array(2)}
const person2 = [
{ id: 1, name: "Soo", age: 20 },
{ id: 2, name: "Kim", age: 30 },
{ id: 3, name: "Lee", age: 40 }
];
// 직렬화
const json4 = JSON.stringify(person)
// 역직렬화
const parsed2 = JSON.parse(json4)
console.log(parsed2); // (3) [{…}, {…}, {…}]
// Syntax
fetch(resource, options)
// Example
fetch(url, options)
.then(response => console.log(respons))
.catch(error => console.log(error))
<!-- fetch.html -->
<body>
<script src="fetchAPI.js"></script>
</body>
<script>
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response=> console.log(response))
.catch(error => console.log(error))
</script>
실행결과로 response 객체가 출력됩니다.
response 객체는 다음과 같은 특징이 있습니다.
<!-- fetch.html -->
<body>
<script src="fetchAPI.js"></script>
</body>
// fetch.js
// 방법 1 - fetch
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(data => console.log(data)) // {userId: 1, id: 1, title: 'delectus aut autem', completed: false}
.catch(error => console.log(error))
// 방법 2 - async/await
async function foo() {
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1')
const data = await res.json()
console.log(data)
}
foo() // {userId: 1, id: 1, title: 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit', body: 'quia et suscipit\nsuscipit recusandae consequuntur …strum rerum est autem sunt rem eveniet architecto'}
npm install -g json-server
json-server --watch 파일명 --port 포트번호
// db.json
{
"users": [
{
"id": 1,
"name": "Leanne Graham",
"email": "Sincere@april.biz",
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org"
},
{
"id": 2,
"name": "Ervin Howell",
"email": "Shanna@melissa.tv",
"phone": "010-692-6593 x09125",
"website": "anastasia.net"
},
{
"id": 3,
"name": "Clementine Bauch",
"email": "Nathan@yesenia.net",
"phone": "1-463-123-4447",
"website": "ramiro.info"
}
]
}
<body>
<table>
<thead>
<tr>
<th>ID</th>
<th>Full Name</th>
<th>Email</th>
<th>Phone</th>
<th>Web Site</th>
</tr>
</thead>
<tbody></tbody>
</table>
</body>
const $tbody = document.querySelector('tbody')
const makeRow = obj => {
let result = ''
obj.forEach(item => {
result += `
<tr>
<td>${item.id}</td>
<td>${item.name}</td>
<td>${item.email}</td>
<td>${item.phone}</td>
<td>${item.website}</td>
</tr>
`
})
$tbody.innerHTML = result
}
// 1. 게시판 만들기 (READ)
// async/await
const getData = async () => {
const response = await fetch('http://localhost:5050/users')
const data = await response.json()
makeRow(data)
}
getData()
<!-- Form -->
<form class="form-container">
<div>
<label for="userName">Enter your userName: </label>
<input type="text" name="name" id="userName">
</div>
<div>
<label for="userEmail">Enter your email: </label>
<input type="email" name="email" id="userEmail">
</div>
<div>
<label for="userPhone">Enter your userPhone: </label>
<input type="tel" name="phone" id="userPhone" r>
</div>
<div>
<label for="userWebsite">Enter your userWebsite: </label>
<input type="text" name="website" id="userWebsite">
</div>
<div>
<button type="submit">전송</button>
</div>
</form>
<script src="jsonserver.js"></script>
const $form = document.querySelector('.form-container') // form 태그 찾기
$form.addEventListener('submit', e => { // submit 이벤트 처리
e.preventDefault() // 디폴트 행동 제거(새로고침 방지)
const formData = new FormData($form) // FormData 객체 생성)
const userInfo = new URLSearchParams(formData) // URLSearchParams 객체 생성
fetch(`http://localhost:5050/users`, { // 서버에 데이터 전송
method: 'POST',
body: userInfo,
})
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.log(err))
getData()
})
<div>
<div>
<label for="userName">Enter your userName: </label>
<input type="text" name="userName" id="userName" />
</div>
<div>
<label for="userEmail">Enter your email: </label>
<input type="email" name="userEmail" id="userEmail" />
</div>
<div>
<label for="userPhone">Enter your userPhone: </label>
<input type="tel" name="userPhone" id="userPhone" />
</div>
<div>
<label for="userWebsite">Enter your userWebsite: </label>
<input type="text" name="userWebsite" />
</div>
<div>
<button id="submitBtn">전송</button>
</div>
</div>
const $userName = document.querySelector('#userName')
const $userEmail = document.querySelector('#userEmail')
const $userPhone = document.querySelector('#userPhone')
const $userWebsite = document.querySelector('#userWebsite')
const $submitBtn = document.querySelector('#submitBtn')
const createData = async (data = {}) => {
let res = await fetch(`http://localhost:5050/users`, {
method: 'POST', // *GET, POST, PUT, DELETE 등
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
return res.json()
}
$submitBtn.addEventListener('click', () => {
createData({
name: $userName.value,
email: $userEmail.value,
phone: $userPhone.value,
website: $userWebsite.value,
})
getData()
})
실행결과1 (입력 전)
실행결과2 (입력 후 -> 입력값 추가됨)
긴글 읽으시느라 수고하셨습니다.😊