我在一个控制器中构建的一个变量中有以下数据作为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"] = ???
我可以在最后几行写些什么。我之所以这么说是因为将来“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":[
它应该打印那些变量的实际值,而不是username和applicationName。你能告诉我这里我做错了吗。
提前致谢。
任何帮助都将不胜感激。
答案 0 :(得分:2)
好的,我想出了一些简单的事情:
// 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;
注意:我不建议这样做,因为它使用更多变量,令人困惑,并且不易维护。从root到child构建对象比反之亦然,这是你的模板代码试图做的事情。
答案 1 :(得分:0)
以下是我的示例代码:
$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;