3 回答

TA貢獻2080條經驗 獲得超4個贊
JSON不是庫,而是一種表示法?;ㄒ恍r間來閱讀它。
有一些編碼方法。下面有一個簡單的示例。
獲取所有檢查的輸入及其值:
var result = Array.from(document.querySelectorAll('input[type=checkbox]:checked')).map(a => { return { id: a.getAttribute("id"), value: a.value }; });
console.log(result);
在本地存儲中保存和從中檢索:
var resultInJson = JSON.stringify(result);
console.log(resultInJson);
localStorage.setItem("data", resultInJson);
console.log(localStorage.getItem("data"));
console.log(JSON.parse(localStorage.getItem("data")));

TA貢獻1797條經驗 獲得超6個贊
沒有JSON注意事項的解決方案:
const
foodForm = document.querySelector('#food-form'),
StorageName = 'myFoodStorage';
foodForm.onchange=()=>{ // = storeFood
let CheckList = Array.from(foodForm.querySelectorAll('input[type=checkbox]')).map(a=>`${a.id}=${a.checked}`);
sessionStorage.setItem(StorageName, CheckList.join(','));
}
window.onload=()=>{ // = retrieveFood
let CheckList = sessionStorage.getItem(StorageName)
if (CheckList) {
CheckList.split(',').forEach(e=>{
let pair = e.split('=');
document.getElementById('pair[0]').checked = pair[1] === 'true';
})
}
}

TA貢獻1876條經驗 獲得超5個贊
如果要更高級的序列化,請使用此方法,它應適用于所有值為字符串的對象。
用于sessionStorage.setItem('foods', serialize(foodStates))存儲復選框的狀態并用于對其parse(sessionStorage.getItem('foods'))進行重構
"use strict";
function sanitize(str) {
//Split into char array, escape chars and put back together into string
return str.split('').map(chr => sanitize.map[chr] || chr).join('')
}
function desanitize(str) {
//Split into char array, escape chars and put back together into string
return str.replace('\\:', ':').replace('\\;', ';').replace('\\\\', '\\')
}
sanitize.map = {
'\\': '\\\\',
':': '\\:',
';': '\\;'
}
function serialize(obj) {
var result = "";
for(var prop in obj) {
result += `${sanitize(prop)} :${sanitize(obj[prop])} ;`;
}
//Remove last ' ;'
result = result.slice(0, -2);
return result;
}
function parse(str) {
var obj = {};
for(var part of str.split(' ;')) {
var [key, value] = part.split(' :')
key = desanitize(key)
value = desanitize(value)
obj[key] = value;
}
return obj;
}
var orgObj = {pizza: "true", hamburger: "false", sandwich: "true"}
console.log(orgObj)
var encodedString = serialize(orgObj)
console.log(encodedString)
var newObj = parse(encodedString)
console.log(newObj)
添加回答
舉報