JavaScript $http.get 一个 json 数组并将其存储在本地存储中

JavaScript $http.get an json array and store it in localstorage

我正在尝试接收一个 json 数组并将其存储在本地存储中。 我见过一些这样的问题,但他们帮不了我。所以我想尝试我自己的问题。我在 Ionic Framework 中开发。

我的控制器包括以下内容:

app.controller('QuestionsCtrl', function($scope, $http, $stateParams, $localstorage) {

$scope.getData = function() {

// get the json
   $http.get("data/fragenArray.json")
        .success(function(data) {

        //output of json as a string  -> correct
        console.log('data: ' + JSON.stringify(data));

        // store json in local storage
        $localstorage.setObject('fragenset', data);

        // restore json from local storage
        var post = $localstorage.getObject('fragenset');

        // output of local storage item -> incorrect
        // I got: Test xxx: [object Object]
        console.log('Test xxx: ' + post);
     })
     .error(function(data) {
            alert("ERROR");
        });
    }
 });

要存储 json 我有:

angular.module('utils', [])

 .factory('$localstorage', ['$window', function($window) {
   return {
     set: function(key, value) {
       $window.localStorage[key] = value;
     },
     get: function(key, defaultValue) {
       return $window.localStorage[key] || defaultValue;
     },
     setObject: function(key, value) {
       $window.localStorage[key] = JSON.stringify(value);
     },
     getObject: function(key) {
       return JSON.parse($window.localStorage[key] || '{}');
     }
   }
 }]);

所以我决定在没有 http.get 请求的情况下尝试一下:

app.run(function($localstorage, $http) {
   $localstorage.setObject('post', {"fragen":[
    {
        "id":"1",
        "frage":"Wie ist das Wetter?",
        "antworten": {
            "a_1":"gut",
            "a_2":"schlecht"
        }
    },
    {
        "id":"2",
        "frage":"Wie geht es dir?",
        "antworten": {
            "a_1":"gut",
            "a_2":"schlecht"
        }
    }
 ]});
   var post = $localstorage.getObject('post');
   console.log(post);
 })

结果正是我所期望的 - 一个 json 对象。

那么如何正确存储 http.get 中的 json 数组?

我们知道您的数据检索工作正常,因为它通过了用 JSON.stringify():

编写的测试
// get the json
   $http.get("data/fragenArray.json")
        .success(function(data) {

        //output of json as a string  -> correct
        console.log('data: ' + JSON.stringify(data));

        // store json in local storage
        $localstorage.setObject('fragenset', data);

        // restore json from local storage
        var post = $localstorage.getObject('fragenset');

        // output of local storage item -> incorrect
        // I got: Test xxx: [object Object]
        console.log('Test xxx: ' + post);
     })

上次考试不好。不是结果不正确。测试编码不正确。

这是因为您无法通过将对象附加到字符串来检查对象。

如果X是一个对象,那么无论X包含什么, 也许 X = {'a': 123}

console.log("anything "+X); 
// --> "anything [object Object]"

这是因为 "anything "+X 是一个 字符串表达式 并且当对象被强制转换为字符串时, Javascript 将对象替换为字符串“[object对象]

以下是您应该测试的内容:

 //output of storage as a json string  
 console.log('post: ' + JSON.stringify(post));

最后

 // json string of storage matches json string of input data
 console.log(JSON.stringify(data)===JSON.stringify(post));
 // will yield true or false