私はこのコードを持っています:
var string = '{"items":[{"Desc":"Item1"},{"Desc":"Item2"}]}';
localStorage.setItem('added-items', JSON.stringify(string));
このコードはlocalStorageを使用します。
保存されたデータを取得するコードは次のとおりです。
var retrievedObject = localStorage.getItem('added-items');
私の問題は、データ項目のサイズをどのように取得できますか?答えは2でなければなりません。
「Item1」と「Item2」を取得するにはどうすればよいですか?
私は試した retrievedObject[0][0]
しかし、機能していません。
それにデータを追加する方法は?それで
{"items":[{"Desc":"Item1"},{"Desc":"Item2"},{"Desc":"Item3"}]}
使ってもいいですか JSON.stringify
?
var string = '{"items":[{"Desc":"Item1"},{"Desc":"Item2"}]}';
localStorage.setItem('added-items', JSON.stringify(string));
stringify
は、object
を取り、そのプレゼンテーションをstring
として返すことを意味します。あなたが持っているものは、すでにJSONオブジェクトではなく文字列です。
逆はJSON.parse
はstring
を取り、object
に変換します。
どちらも配列のサイズを取得することとは関係ありません。 JavaScriptを適切にコーディングする場合、JSON.parse
またはJSON.stringify
。 serializationが明示的に必要な場合のみ。
配列のサイズにlength
を使用します。
var obj = {"items":[{"Desc":"Item1"},{"Desc":"Item2"},{"Desc":"Item3"}]}
console.debug(obj.items.length);
// THIS IS ALREADY STRINGIFIED
var string = '{"items":[{"Desc":"Item1"},{"Desc":"Item2"}]}';
// DO NOT STRINGIFY AGAIN WHEN WRITING TO LOCAL STORAGE
localStorage.setItem('added-items', string);
// READ STRING FROM LOCAL STORAGE
var retrievedObject = localStorage.getItem('added-items');
// CONVERT STRING TO REGULAR JS OBJECT
var parsedObject = JSON.parse(retrievedObject);
// ACCESS DATA
console.log(parsedObject.items[0].Desc);
この質問に出くわし、受け入れられた答えがあなたが期待し夢見ていたものすべてではないことがわかった将来の人々に明確さをもたらすために:
ユーザーがstring
またはJSON
をlocalStorage
に入力できるように、質問を拡張しました。
AddToLocalStorage(data)
とGetFromLocalStorage(key)
の2つの関数が含まれています。
AddToLocalStorage(data)
を使用すると、入力がstring
でない場合(JSON
など)、入力は1に変換されます。
GetFromLocalStorage(key)
は、上記のlocalStorage
のkey
からデータを取得します
スクリプトの最後に、JSON内のデータを調べて変更する方法の例を示します。オブジェクトと配列の組み合わせであるため、.
と[]
の組み合わせを使用する必要があります。
var string = '{"items":[{"Desc":"Item1"},{"Desc":"Item2"}]}';
var json = {"items":[{"Desc":"Item1"},{"Desc":"Item2"},{"firstName":"John"},{"lastName":"Smith"}]};
localStorage.setItem('added-items', AddToLocalStorage(string));
localStorage.setItem('added-items', AddToLocalStorage(json));
// this function converts JSON into string to be entered into localStorage
function AddToLocalStorage(data) {
if (typeof data != "string") {data = JSON.stringify(data);}
return data;
}
// this function gets string from localStorage and converts it into JSON
function GetFromLocalStorage(key) {
return JSON.parse(localStorage.getItem(key));
}
var myData = GetFromLocalStorage("added-items");
console.log(myData.items[2].firstName) // "John"
myData.items[2].firstName = ["John","Elizabeth"];
myData.items[2].lastName = ["Smith","Howard"];
console.log(myData.items[2]) // {"firstName":["John","Elizabeth"],"lastName":["Smith","Howard"]}
console.log(myData.items.length) // 4
JSON.parse
は間違いなくオブジェクトを作成するための最良の方法ですが、それが機能しない場合(サポートが不足しているため)、obj = eval('(' + str + ')');
が機能するはずです。過去にHTML to PDFコンバーターでJSON.parse
を含まず、eval
がトリックを行っていました。最初にJSON.parse
を試してみてください。
オブジェクトにアクセスします:obj.items[0].Desc;