簡體   English   中英

如何在Angular.js中更改JSON數據

[英]How to change json data in Angularjs

我在一個控制器中構建的一個變量中具有以下數據作為JSON。 我可以使用工廠/服務在其他控制器中訪問此json數據。 現在,我想像輸出json數據一樣修改此json數據。

輸入傑森

[  
   {  
      "text":"Identity",
      "checked":true,
      "timestamp":1435862483093
   },
   {  
      "text":"Calendar",
      "checked":true,
      "timestamp":1435862483443
   },
]

輸出:

{  
   "myname":{  
      "Facebook":{  
         "trackdata":[  
            {  
               "text":"Identity",
               "checked":true,
               "timestamp":1435862483093
            },
            {  
               "text":"Calendar",
               "checked":true,
               "timestamp":1435862483443
            }
         ],
         "selecteddata":[  
            {  
               "text":"Identity",
               "checked":true,
               "timestamp":1435862483093
            },
            {  
               "text":"Calendar",
               "checked":true,
               "timestamp":1435862483443
            }
         ]
      }
   }
}

我在嘗試什么:

        var trackdata = JSON.stringify(DataService.getTrackedData());
        var selecteddata = JSON.stringify(DataService.getSelectedData());

        var userJson = {};
        userJson["trackdata"] = trackdata;
        userJson["selecteddata"] = selecteddata;
        userJson["Facebook"] = ???
        userJson["myname"] = ???

我可以在最后幾行中寫些什么。 我之所以會這樣,是因為將來的“ myname”和“ Facebook”將根據用戶輸入。

更新:2

 pmApp.controller('FooterController', function ($scope, $state, DataService) {

    $scope.infunc = function () {
        console.log("Username : " + DataService.username);
        console.log("Application Name : " + DataService.applicationName);

        var username = DataService.username;
        var applicationName = DataService.username;

        $scope.outputJson = {
            username: {
                applicationName: {
                    "trackdata": DataService.getTrackedData(),
                    "selecteddata": DataService.getSelectedData()
                }
            }
        }

        /* $scope.outputJson.myname.Facebook.trackdata = ;
         $scope.outputJson.myname.Facebook.selecteddata = DataService.getSelectedData();*/

        console.log(JSON.stringify($scope.outputJson));

    };

});

它給我這樣的輸出:

 "username":{  
      "applicationName":{  
         "trackdata":[  

應該打印這些變量的實際值,而不是用戶名和applicationName。 您能告訴我我在做什么錯嗎?

提前致謝。

任何幫助,將不勝感激。

好,這是我想到的一些簡單方法:

// parse input in order to modify it
var inputObj = JSON.parse(input);

// create a new object based on your data from your input
var outputObj = {
    'myname': {
        'Facebook': {
            'trackdata': inputObj,
            'selecteddata': inputObj
        }
    }
};

// create new JSON output
var output = JSON.stringify(outputObj);

 var input = '[ { "text":"Identity", "checked":true, "timestamp":1435862483093 }, { "text":"Calendar", "checked":true, "timestamp":1435862483443 }]'; var inputObj = JSON.parse(input); var outputObj = { 'myname': { 'Facebook': { 'trackdata': inputObj, 'selecteddata': inputObj } } }; var output = JSON.stringify(outputObj); $('#input').html(JSON.stringify(inputObj,null,2)); $('#output').html(JSON.stringify(outputObj,null,2)); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> Input: <pre id="input"></pre><br> Output: <pre id="output"></pre> 

編輯:

我認為JSON.parse()JSON.stringify()混亂。 JSON.parse()將json字符串作為輸入並輸出javascript對象。 JSON.stringify()將一個javascript對象作為輸入並輸出一個字符串。 在您嘗試過的操作中,當您可能想將對象分配給該字段時,您正在為javascript對象字段分配一個字符串。 有幫助嗎?

編輯:

要完成問題中列出的示例,請執行以下操作。

var trackdata = JSON.stringify(DataService.getTrackedData());
var selecteddata = JSON.stringify(DataService.getSelectedData());

var fieldName1 = "Facebook";
var fieldName2 = "myname";

var userJson = {};
userJson["trackdata"] = trackdata;
userJson["selecteddata"] = selecteddata;
var userJson2 = {};
userJson2[fieldName1] = userJson;
var userJson3 = {};
userJson3[fieldName2] = userJson2;

注意:我不建議這樣做,因為它使用更多的變量,容易混淆,並且不容易維護。 反之亦然,從根到子級構建對象要容易得多,這反之亦然,這正是您的模板代碼所嘗試的。

這是我的示例代碼:

$scope.inputJson = [  
  {  
    "text":"Identity",
    "checked":true,
    "timestamp":1435862483093
  },
  {  
    "text":"Calendar",
    "checked":true,
    "timestamp":1435862483443
  }
]

$scope.outputJson = {
  "myname": {
    "Facebook":{  
      "trackdata": [],
      "selecteddata": []
    }
  }
}

$scope.outputJson.myname.Facebook.trackdata = $scope.inputJson;
$scope.outputJson.myname.Facebook.selecteddata = $scope.inputJson;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM