1

私が取り組んでいるプログラムでは、JSON.stringify を使用してリテラル変数をローカル ストレージに送信します。ローカル ストレージを常に更新し、既存のローカル ストレージに追加する計画です。JSON ファイルの解析に関して問題が発生しています。ストレージに追加するための私のコードは次のとおりです。

function addtoStorage(key, data) {
    if (typeof(Storage) !== "undefined") {
    if (localStorage[key]) {
        console.log("Local Storage stuff" + localStorage[key]);
        var olddata = JSON.parse(localStorage[key]);
        var dataJSON = JSON.stringify(olddata + data);
        localStorage[key] = localStorage[key] + dataJSON;
    }
    else {
        var dataJSON = JSON.stringify(data);
        localStorage[key] = dataJSON;
    }
}
else {
    console.log("You don't have storage capabilities. Sorry. Next time improve your browser.");
}

};

そして、私の出力はconsole.logでこれです:

Local Storage stuff{"asdf":"","tes":6,"type":"asdf","ast":1,"sd":"","ew":"","asdf":{"te":0,"wer":0},"asf":"","te":"","context":{"asdf":1,"total_hits":0,"asdf":1,"tew":0,"asdf":"","tes":"","date":"asfd-asdf-","asdf":0},"asdf":""}"[object Object][object Object]" main.js:487

キャッチされていない SyntaxError: 予期しない文字列です

問題が何であるかを理解していると確信しています。私はそれを修正する方法を理解できないようです。明らかにJSONオブジェクトを閉じるのが早すぎます.何か推奨事項はありますか???

4

2 に答える 2

3

JavaScriptオブジェクトをJSONに解析するためのものであり、2つのオブジェクトを一緒に追加することはできないため、olddata + data行うべきではないと思います.stringify

jQuery が使用するようなオブジェクト マージ関数を実装してみてください。

function merge( first, second ) {
                var len = +second.length,
                        j = 0,
                        i = first.length;

                for ( ; j < len; j++ ) {
                        first[ i++ ] = second[ j ];
                }

                first.length = i;

                return first;
        }

それからただする

var newdata = merge(olddata, data);
var dataJSON = JSON.stringify(newdata);

https://github.com/jquery/jquery/blob/master/src/core.js#L390

于 2013-11-09T06:44:44.283 に答える