2016-04-25 44 views
1

我需要一個轉換成json格式的對象。我嘗試了下面的代碼,但對象沒有轉換成json格式。如何使用KnockoutJS將對象轉換爲json格式?

function ViewModel() { 
    var self = this; 

    var jsonData = {  
      name: "Johnny", 
      surname: "Boy"   
    } 

    var obj = ko.toJS(jsonData);   
}; 

var vm = new ViewModel(); 
ko.applyBindings(vm); 
+0

'ko.toJS'和'ko.toJSON'兩種不同的方法。你想轉換爲JSON或不? –

+0

你的jsonData是一個JSON對象 –

回答

0

these docs,你需要利用ko.toJSON方法:

function ViewModel() { 
 
    var self = this; 
 

 
    var jsonData = { 
 
    name: "Johnny", 
 
    surname: "Boy" 
 
    }; 
 

 
    var json = ko.toJSON(jsonData, null, 2); 
 

 
    console.log(json); 
 
    self.myjson = json; 
 
}; 
 

 
var vm = new ViewModel(); 
 
ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 
<pre data-bind="text: myjson"></pre>

第二個和第三個參數都是可選的。當我輸入它們時,它們暗示你想要格式化輸出,ko.toJSON使用與JSON.stringify相同的參數。

作爲一個腳註,ko.toJS也很有用,主要用於將整個視圖模型(但只是其公共屬性)轉換爲普通的JS對象。看到這個例子:

function ViewModel() { 
 
    var self = this; 
 

 
    // Not visible in ko.toJS/ko.toJSON: 
 
    var privateproperty = "privacy!"; 
 
    self.alerter = function() { alert('Hi!'); }; 
 
    
 
    // All visible in ko.toJS/ko.toJSON: 
 
    self.name = ko.observable("Johnny"); 
 
    self.surname = ko.observable("Boy"); 
 
    self.publicproperty = "publicly!"; 
 
}; 
 

 
var vm = new ViewModel(); 
 

 
ko.applyBindings(vm); 
 

 
console.log(ko.toJS(vm)); // outputs a JS *object* 
 
console.log(ko.toJSON(vm)); // outputs it as a json-string
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 
See console.log output...