【问题标题】:How to change json data in Angularjs如何在Angularjs中更改json数据
【发布时间】:2015-07-02 19:45:25
【问题描述】:

我在一个控制器中构建的一个变量中有以下数据作为 JSON。我可以使用工厂/服务访问其他控制器中的这个 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"] = ???

我可以在最后几行写什么。我喜欢的原因是将来“我的名字”和“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":[  

它应该打印这些变量的实际值,而不是用户名和应用程序名。你能告诉我我在这里做错了什么吗?

提前致谢。

任何帮助将不胜感激。

【问题讨论】:

  • 使用JSON.parse() 创建一个javascript对象。然后修改对象,使用JSON.stringify()将其放回字符串中。
  • @JohnCarpenter Json.stringify() 将转换成字符串
  • 看我的回答我的意思:)
  • 你能用代码检查我更新的问题吗?我该怎么做?
  • 我不清楚您的后续问题是什么。您能具体说明我的回答令人困惑的地方吗?

标签: javascript json angularjs ionic-framework ionic


【解决方案1】:

好的,我想出了一些简单的方法:

// 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;

注意:我不建议这样做,因为它使用更多变量,令人困惑,并且不容易维护。从根到子构建对象比反之容易得多,这正是您的模板代码试图做的。

【讨论】:

  • 如果你运行代码sn-p,你应该看到上面的代码工作了:)。对于您的具体示例,请将我的代码中的 inputObj 替换为 DataService.getTrackedData()
  • 感谢您的回复。我应该替换变量名而不是 'myname' 和 'Facebook' 吗?实际上,在我的情况下,每次都会有所不同。我想把这些名字放在变量中。
  • 我已编辑我的答案以解决您的问题。另请注意,jsfiddle.net 是编写 javascript 代码的好地方 :)。在那里,您可以测试小段代码,直到您满意后再将它们添加到更大的代码段中。
  • 再次感谢您的回复。检查我更新的问题(Update-2 部分),它不能正常工作,因为我想让它工作。我正在按照你的模式来设计它。请检查更新的代码。
  • 您在更新中的语法与我在回答中的不同。您可以像这样索引对象。 obj[fieldName] = "some value" 但您不能创建像 obj = {fieldName: "some value"} 这样的对象,因为在 javascript 中它会假定您希望字段名称为 fieldName
【解决方案2】:

这是我的示例代码:

$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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2020-12-24
    • 2014-04-14
    相关资源
    最近更新 更多