Ошибка формата JSON после jQuery ajax

javascript json

67 просмотра

1 ответ

Я получаю данные о моем приложении nodejs из приложения cordova через ajax-вызов jQuery, и оно форматируется как

{
     "network[msisdn]": "+254738XXXXXX",
      "network[country]": "ke",
      "network[roaming]": "false",
      "network[simState]": "Ready",
      "network[network]": "HSPA",
      "network[simSerial]": "89254031021032011310",
      "network[subscriber]": "639031023201131",
      "network[service]": "GSM"
}

вместо обычного

{
  network: {    
              "msisdn" : "",
               ...
           }
}

Я могу перебирать объект в приложении для телефона cordova, одновременно получая доступ к вложенным ключам, таким как objectName .network.msisdn, но не могу получить данные в своем бэкэнде nodejs.

Я публикую данные, как показано ниже

$.ajax({
         url: 'http://'+$scope.api.host+':'+$scope.api.port+'/notices',
         method: 'POST',
         dataType: 'json',
         data: $scope.storage.history[0]
      }).then(function(response){

          //! STORE THE RESULT IN THE RELEVANT OBJECT 
          $scope.storage.history[nextPos].locale = response;
          alert(JSON.stringify(response));

      }); 

Я хотел бы получить доступ к суб-ключам от объекта.

Я пробовал Json.Parse (Json.stringify (objectName)) перед публикацией данных,

Я также пытался опубликовать без данных JSON DataType в вызове jQuery AJAX,

Я пытался JSON.parse () объект в конце все безрезультатно.

Я очень ценю вашу помощь.

Автор: Ian Mbae Источник Размещён: 08.11.2019 11:13

Ответы (1)


3 плюса

Решение

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

var exampleData = {
  "network[msisdn]": "+254738XXXXXX",
  "network[country]": "ke",
  "network[roaming]": "false",
  "network[simState]": "Ready",
  "network[network]": "HSPA",
  "network[simSerial]": "89254031021032011310",
  "network[subscriber]": "639031023201131",
  "network[service]": "GSM",
  "simpleKey": "simpleValue"
}

console.log(exampleData['network[country]']); // Logs -> ke

// This converts the keys in place
// it can be modified to return a new object instead
function convertKeys(data) {
  var pieces;
  for(var key in data) {
    if (data.hasOwnProperty(key)) {
      pieces = key.match(/(.+)\[(.+)]/);
      if (pieces) {
        data[pieces[1]] = data[pieces[1]] || {};
        data[pieces[1]][pieces[2]] = data[key];
        delete data[key];
      }
    }
  }
}

convertKeys(exampleData);
console.log(exampleData);
console.log(exampleData.network.simState); // Logs -> Ready

Автор: rdubya Размещён: 20.08.2016 11:39
Вопросы из категории :
32x32