Как я могу хранить этот массив в Chrome Storage? [Дубликат]

Если у вас есть php:

php -r 'var_export(json_decode(`curl http://twitter.com/users/username.json`, 1));'

Например: у нас есть ресурс, который предоставляет json странам iso-коды: http://country.io/iso3.json и мы можем легко увидеть его в оболочке с curl:

curl http://country.io/iso3.json

, но она выглядит не очень удобной и не читаемой, лучше разобрать json и увидеть читаемую структуру:

php -r 'var_export(json_decode(`curl http://country.io/iso3.json`, 1));'

Этот код напечатает что-то вроде:

array (
  'BD' => 'BGD',
  'BE' => 'BEL',
  'BF' => 'BFA',
  'BG' => 'BGR',
  'BA' => 'BIH',
  'BB' => 'BRB',
  'WF' => 'WLF',
  'BL' => 'BLM',
  ...

, если у вас есть вложенные массивы, этот вывод будет выглядеть намного лучше ...

Надеюсь, это поможет ...

35
задан Sudarshan 26 January 2013 в 06:53
поделиться

4 ответа

Проблема заключается в chrome.storage.sync.set({key: testPrefs}

Ваши данные хранятся как

{
    key: "{"val":10}"
}

Итак, ваш код chrome.storage.sync.get('myKey') возвращает неопределенный \nустой объект.

Решение I

Использовать строку "key" в качестве вашей клавиши

chrome.storage.sync.get("key", function (obj) {
    console.log(obj);
});

или

Решение II

Установить данные через "myKey".

chrome.storage.sync.set({"myKey": testPrefs}

PS: Не забывайте, что chrome.storage.sync - это постоянный API хранения, используйте chrome.storage.sync.clear перед любым дальнейшим тестированием, чтобы увидеть изменения

Ссылки

EDIT 1

Используйте этот код для установки значения переменной в Chrome.storage

function storeUserPrefs() {
    var key = "myKey",
        testPrefs = JSON.stringify({
            'val': 10
        });
    var jsonfile = {};
    jsonfile[key] = testPrefs;
    chrome.storage.sync.set(jsonfile, function () {
        console.log('Saved', key, testPrefs);
    });

}

Он генерирует следующий вывод

Object{
    myKey: "{"val":10}"
}
54
ответ дан Sudarshan 22 August 2018 в 02:39
поделиться
  • 1
    Спасибо, что работает. Так можно ли использовать строковую переменную в качестве ключа в функциях set / get? – source.rar 26 January 2013 в 09:59
  • 2
    @ source.rar: Check My EDIT # 1 , в указанном выше виде это возможно, надеюсь, что это поможет: – Sudarshan 26 January 2013 в 11:53
  • 3
    Ни один из этих ответов не проверяет неудачу ... цитируя developer.chrome.com/extensions/storage : «Обратный вызов при успешном завершении или при сбое (в этом случае будет установлена ​​runtime.lastError). & Quot; ; – Mitch 25 July 2015 в 09:09
function storeUserPrefs() {
    var key='myKey', testPrefs = {'val': 10};
    chrome.storage.sync.set({[key]: testPrefs}, function() {
      console.log('Saved', key, testPrefs);
    });
}

Вы можете просто заставить оценить ключ переменной, используя [ключ] при сохранении. Таким образом, вы можете легко настроить свои клавиши динамически. Надеюсь, что это поможет.

4
ответ дан danieluy 22 August 2018 в 02:39
поделиться

Поскольку chrome.storage.sync может хранить объекты JS, вы можете просто сделать это:

var save = {};
save["myKey"] = testPrefs;

chrome.storage.sync.set(save, function() {
    console.log('Settings saved');
});
3
ответ дан Eneas Gesing 22 August 2018 в 02:39
поделиться
  • 1
    OP спросил о сохранении и извлечении , а не только сохранении ... – vsync 31 October 2017 в 15:47
testPrefs = JSON.stringify({
            'val': 10
        });
    var jsonfile = {};
    jsonfile[key] = testPrefs;
    chrome.storage.sync.set(jsonfile, function () {
        console.log('Saved', key, testPrefs)
-1
ответ дан Jk1 22 August 2018 в 02:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: