2013-03-22 3 views
1

Все, я видел много примеров, говорящих о том, как разобрать json на объект js (или преобразовать json в объект js) в SO. Но я не видел пример, который привязывает json к уже определенному объекту js. Теперь у меня есть некоторые проблемы с этим, когда я пытаюсь это сделать. Пожалуйста, помогите мне просмотреть его. Благодарю.JSON Bind to Javascript Object

То, что я сделал до сих пор выглядит, как показано ниже:

top=function() 
{ 
    this.encoding =''; 
    this.nodes=[]; 
    this.lastid=''; 
    //I don't how to defined the attributes key in json which is a object. 
    //I think there should exist a parse and toJson function; 
    //this.parse= function(jsonstring){...}; 
    //this.toJson=function(){var jsonstr=....;return jsonstr;}; 
}; 

group=functon() 
{ 
    this.id=''; 
    this.type=''; 
    this.subnodes=[]; 
    this.tagname=''; 
    //.... 
} 

top корень, который содержит неопределенные числа block которых является самостоятельной включен объект.

и Json генерируется Jackson, который выглядит, как показано ниже.

{ 
"nodes": [ 
    { 
     "type": "group", 
     "id": 11, 
     "tagName": "blockrow", 
     "prefix": "aa", 
     "cutomTag": null, 
     "attributes": { 
      "width": "12" 
      //...more 
     }, 
     "subNodes": [ 
      { 
       "type": "group", 
       "id": 111, 
       "tagName": "blockcol", 
       "prefix": "aa", 
       "cutomTag": null, 
       "attributes": { 
        "width": "4" 
       }, 
       "subNodes": [ 
        { 
         "type": "group", 
         "id": 1111, 
         "tagName": "section", 
         "prefix": "aa", 
         "cutomTag": null, 
         "attributes": { 
          "title": "NewSection", 
          "width": "12" 
         }, 
         "subNodes": [ 
          { 
           "type": "leaf", 
           "id": 11111, 
           "tagName": "message", 
           "prefix": "aa", 
           "cutomTag": null, 
           "attributes": { 
            "key": "aa_login_success" 
           } 
          } 
         ] 
        } 
       ] 
      }, 
      { 
       "type": "group", 
       "id": 112, 
       "tagName": "blockcol", 
       "prefix": "aa", 
       "cutomTag": null, 
       "attributes": { 
        "width": "4" 
       }, 
       "subNodes": [ 
        { 
         "type": "group", 
         "id": 1121, 
         "tagName": "section", 
         "prefix": "aa", 
         "cutomTag": null, 
         "attributes": { 
          "title": "NewSection", 
          "width": "12" 
         }, 
         "subNodes": [ 
          { 
           "type": "leaf", 
           "id": 11211, 
           "tagName": "message", 
           "prefix": "aa", 
           "cutomTag": { 
            "type": "cutomTag", 
            "beginPos": 20, 
            "endPos": 50, 
            "id": -1 
           }, 
           "attributes": { 
            "key": "aa_login_failed" 
           } 
          } 
         ] 
        } 
       ] 
      }, 
      { 
       "type": "group", 
       "id": 113, 
       "tagName": "blockcol", 
       "prefix": "aa", 
       "cutomTag": null, 
       "attributes": { 
        "width": "4" 
       }, 
       "subNodes": null 
      } 
     ] 
    }, 
    { 
     "type": "group", 
     "id": 12, 
     "tagName": "blockrow", 
     "prefix": "aa", 
     "cutomTag": null, 
     "attributes": { 
      "width": "12" 
     }, 
     "subNodes": [ 
      { 
       "type": "group", 
       "id": 121, 
       "tagName": "blockcol", 
       "prefix": "aa", 
       "cutomTag": null, 
       "attributes": { 
        "width": "6" 
       }, 
       "subNodes": null 
      }, 
      { 
       "type": "group", 
       "id": 122, 
       "tagName": "blockcol", 
       "prefix": "aa", 
       "cutomTag": null, 
       "attributes": { 
        "width": "6" 
       }, 
       "subNodes": null 
      } 
     ] 
    } 
], 
"version": 1, 
"encoding": "unicode", 
"lastId": 1 

}

вид кода, который я бы себе выглядит, как показано ниже:

var curTop= new top(); 
curTop.parse(jsonstring); 
//manipulate the curTop object... 
//... 
var jsonStr=curTop.toJson(); 
//convert object to json. 

Я надеюсь, что мое направление до сих пор решить проблему прав, если это не так, я надеюсь, вы дадите мне какие-то комментарии.

ответ

2

Вы должны определить функции на прототипе:

top.prototype.parse= function(jsonstring){...}; 

Таким образом, они распределяются между экземплярами. Вы можете получить доступ к членам текущего экземпляра с помощью синтаксиса this.variable.

Для получения дополнительной информации о том, как прототип работает вы можете проверить: https://stackoverflow.com/a/4778408/390330

Ваша полная функция будет выглядеть примерно так:

top.prototype.parse= function(jsonstring){ 
    var data = JSON.parse(json_string); 
    this.encoding = data.encoding; 
    // etc. 
}; 
+0

Привет, @ Басарат, могу ли я определить его таким образом? 'This.parse = function (jsonstring) {...};' thanks. –

+0

Таким образом, у вас будет функция для каждого экземпляра (плохо для памяти). Не говоря уже о том, что вы не сможете создать цепочку наследования. – basarat

+0

ОК, я вижу. Благодарю. –

1

попробовать этот код ..

var arr_from_json = JSON.parse(json_string); 
2

попробовать это один .. это один способ преобразования строки в объект.

var response = eval('(' + data + ')');