鍍金池/ 問(wèn)答/HTML/ 有關(guān)JSON.stringify( )的問(wèn)題

有關(guān)JSON.stringify( )的問(wèn)題

let knowledgeData =[];

    let initialKnowledge = [
        [
            ["id", 1],
            ["title", "關(guān)于float的那些事兒"],
            ["URL", "http://www.w3school.com.cn/cssref/pr_class_float.asp"],
            ["progress", 100],
            ["evaluation", 3],
            ["notes", "關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒"],
            ["tags", ["1", "2", "3"]]
        ], [
            ["id", 2],
            ["title", "position知多少"],
            ["URL", "http://www.w3school.com.cn/cssref/pr_class_position.asp"],
            ["progress", 75],
            ["evaluation", 4],
            ["notes", "position知多少position知多少position知多少position知多少position知多少position知多少position知多少position知多少position知多少"],
            ["tags", ["1", "2"]]
        ], [
            ["id", 3],
            ["title", "1211gfdhfnndhdfhdfgfd"],
            ["URL", "http://www.w3school.com.cn/cssref/pr_class_position.asp"],
            ["progress", 66],
            ["evaluation", 2],
            ["notes", "gfgitiongdfgfdh42356576654435u6uyuydhfjyrdjfjyrdhhvjtdyrdhhmvjdhhmvhthhgchvjyhmhvjyhdgmhvhyedtjfhjyyedtjykkfuuysjx"],
            ["tags", ["2", "3"]]
        ]
    ];

    for (let knowledge of initialKnowledge) {
        knowledgeData.push(new Map(knowledge));
    }


    localStorage.setItem("knowledgeData", JSON.stringify(knowledgeData));

遇到問(wèn)題:現(xiàn)在將knowledgeData這個(gè)數(shù)組轉(zhuǎn)換成JSON字符串存到localStorage中,再使用JSON.parse(localStorage.getItem("knowledgeData"))取出,是空的,不知道為什么?是因?yàn)槭褂昧薓ap的原因嗎?求大神解答

回答
編輯回答
臭榴蓮

1.json 是不支持 map 的,在序列化前需要將 map 轉(zhuǎn)換為 object。
2.樓上的做法稍微有點(diǎn)麻煩,將 map 轉(zhuǎn)換為 object,其實(shí)只需要 [...map] 就好了。

更為簡(jiǎn)潔的寫(xiě)法:

let knowledgeData =[]

let initialKnowledge = [
    [
        ["id", 1],
        ["title", "關(guān)于float的那些事兒"],
        ["URL", "http://www.w3school.com.cn/cssref/pr_class_float.asp"],
        ["progress", 100],
        ["evaluation", 3],
        ["notes", "關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒"],
        ["tags", ["1", "2", "3"]]
    ], [
        ["id", 2],
        ["title", "position知多少"],
        ["URL", "http://www.w3school.com.cn/cssref/pr_class_position.asp"],
        ["progress", 75],
        ["evaluation", 4],
        ["notes", "position知多少position知多少position知多少position知多少position知多少position知多少position知多少position知多少position知多少"],
        ["tags", ["1", "2"]]
    ], [
        ["id", 3],
        ["title", "1211gfdhfnndhdfhdfgfd"],
        ["URL", "http://www.w3school.com.cn/cssref/pr_class_position.asp"],
        ["progress", 66],
        ["evaluation", 2],
        ["notes", "gfgitiongdfgfdh42356576654435u6uyuydhfjyrdjfjyrdhhvjtdyrdhhmvjdhhmvhthhgchvjyhmhvjyhdgmhvhyedtjfhjyyedtjykkfuuysjx"],
        ["tags", ["2", "3"]]
    ]
]

for (let k of initialKnowledge) {
    knowledgeData.push([...k])
}

localStorage.setItem("knowledgeData", JSON.stringify(knowledgeData))
2018年4月23日 19:44
編輯回答
擱淺

如下所示是可以的,map在stringify前需要轉(zhuǎn)化成對(duì)象

function strMapToObj(strMap) {
    let obj = Object.create(null);
    for (let [k,v] of strMap) {
        obj[k] = v;
    }
    return obj;
}

let knowledgeData =[];

let initialKnowledge = [
    [
        ["id", 1],
        ["title", "關(guān)于float的那些事兒"],
        ["URL", "http://www.w3school.com.cn/cssref/pr_class_float.asp"],
        ["progress", 100],
        ["evaluation", 3],
        ["notes", "關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒關(guān)于float的那些事兒"],
        ["tags", ["1", "2", "3"]]
    ], [
        ["id", 2],
        ["title", "position知多少"],
        ["URL", "http://www.w3school.com.cn/cssref/pr_class_position.asp"],
        ["progress", 75],
        ["evaluation", 4],
        ["notes", "position知多少position知多少position知多少position知多少position知多少position知多少position知多少position知多少position知多少"],
        ["tags", ["1", "2"]]
    ], [
        ["id", 3],
        ["title", "1211gfdhfnndhdfhdfgfd"],
        ["URL", "http://www.w3school.com.cn/cssref/pr_class_position.asp"],
        ["progress", 66],
        ["evaluation", 2],
        ["notes", "gfgitiongdfgfdh42356576654435u6uyuydhfjyrdjfjyrdhhvjtdyrdhhmvjdhhmvhthhgchvjyhmhvjyhdgmhvhyedtjfhjyyedtjykkfuuysjx"],
        ["tags", ["2", "3"]]
    ]
];

for (let knowledge of initialKnowledge) {
    knowledgeData.push(strMapToObj(new Map(knowledge)));
}
   localStorage.setItem("knowledgeData", JSON.stringify(knowledgeData));
2018年6月25日 13:12