2013-10-07 9 views
24

Я выполняю «ручной» запуск через свойства класса javascript, чтобы сформировать JSON, как показано ниже. Это кажется неуклюжим, и я бы научился делать это автоматически, поэтому мне не пришлось бы связываться с функцией «toJson», если я добавлю или удалю любые свойства, например.Как JSONify свойства объекта javascript

Может ли полезный ум указать мне в правильном направлении, как приспособить функцию «toJson» ниже для этой цели?

Большое спасибо заранее.

/* Using Simple JavaScript Inheritance 
* By John Resig http://ejohn.org/ 
* MIT Licensed.*/ 
var LogEntry = Class.extend({ 
    init: function (_conferenceId, _tokenId, _logType, _logValue) { 
     this.dato = new Date(); 
     this.logValue = _logValue; 
     this.logType = _logType; 
     this.conferenceId = _conferenceId; 
     this.tokenId = _tokenId; 
    }, 
    toJson: function() { 
     // ? 
     var jsonStringBuilder = '{ '; 
     jsonStringBuilder += '"dato": ' + this.dato.toString() + ','; 
     jsonStringBuilder += '"conferenceId": ' + this.conferenceId + ','; 
     if (this.tokenId== null) { 
      jsonStringBuilder += '"tokenId":null,'; 
     } 
     else { 
      jsonStringBuilder += '"tokenId": ' + _tokenId + ','; 
     } 
     jsonStringBuilder += '"logValue": ' + this.logValue + ','; 
     jsonStringBuilder += '"logType": ' + this.logType; 
     jsonStringBuilder += '}'; 

     return jsonStringBuilder; 
     } 
}); 

ответ

46

JSON.stringify - это функция, которую вы ищете.

Некоторые very old browsers не обеспечивают объект JSON, но вы можете использовать a shim library для этих браузеров.

+0

Я действительно стараюсь, но toJson: функция() { возвращение JSON.stringify (это); } возвращение null. –

+0

Вы неправильно понимаете 'toJSON'. Если он существует, 'JSON.stringify' * вызывает * метод' toJSON' объекта, а затем сериализует * объект, который возвращает функция *. Если 'toJSON' не существует,' stringify' просто сериализует объект. – josh3736

+3

Прошу прощения. 'toJson' был моим собственным именем для функции. Я собираю плохой выбор ... –

7

Я думаю, что вы ищете JSON.stringify().

+1

Я действительно пробовал это, но toJson: function() { return JSON.stringify (this); } возвращение null. –

2

Вы можете использовать stringify, если хотите. Javascript также очень интересен и позволяет передавать тезисы контекста, поэтому вам действительно не нужно определять членов класса так, как вы. Я не знаю, что ваша конечная цель, но проверить это:

function foo(context) { 
    dosomething(context.bar); 
} 

Вы можете динамически добавлять произвольное количество членов с простыми декларациями, что делает контекст объект JSON по своей сути, как это:

context.bar = "hello world"; 

Таким образом, когда вы передаете «контекст» на сервер, нет никакой реальной необходимости «стягивать» его (предполагая, что ваша бэкэнд-структура имеет своего рода JSON-анализ, который есть).

Edit: я немного не по теме, я просто ненавижу видеть длинные строки Params в JS

Смежные вопросы