Как изменить данные JSON в Angularjs

0

У меня есть следующие данные как 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":[  

Вместо имени пользователя и имени приложения оно должно печатать фактическое значение этой переменной. Не могли бы вы рассказать мне, что я делаю неправильно здесь.

Заранее спасибо.

Любая помощь будет оценена по достоинству.

Теги:
ionic-framework
ionic

2 ответа

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;

Примечание. Я бы не рекомендовал делать это таким образом, поскольку он использует больше переменных, запутывает и нелегко поддерживать. Построение объекта от root к детям намного проще, чем наоборот, что и пытался сделать ваш шаблон кода.

  • 0
    если вы запустите фрагмент кода, вы должны увидеть, что приведенный выше код работает :). Для вашего конкретного примера замените inputObj в моем коде на DataService.getTrackedData()
  • 0
    Спасибо за ваш ответ. Должен ли я заменить имя переменной вместо «myname» и «Facebook»? На самом деле это было бы по-другому в моем случае каждый раз. Я хочу поставить эти имена из переменных.
Показать ещё 5 комментариев
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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню