2013-04-04 73 views
0

什么是root属性值,如果我得到一个JSON这样的:ExtJS的根节点

{ 
    "status": { 
     "status": 0, 
     "msg": "Ok", 
     "protocolversion": "extjs.json" 
    }, 
    "value": { 
     "table": [ 
      [ 
       "admin", 
       "Administrator", 
       "" 
      ], 
      [ 
       "test", 
       "Test", 
       "" 
      ] 
     ], 
     "total": 2 
    } 
} 

的数据将显示在GridPanel中,1排是admin,1行试验等

尝试:

valuevalue.table

如何得到这个工作?

回答

1

value.table是root属性是正确的,但您使用的是我不认为分机设置了一个JSON格式默认处理。它有一个用于json的读取器,用于一个对象数组,而不是嵌套的没有对象映射信息的字段值数组。

如果您必须使用该格式,您需要创建自己的读写器或仅使用Ext.Ajax.request(),并在回调中将嵌套数组解析为对象。喜欢的东西:

Ext.Ajax.request({ 
    url: 'path.com/to/content', 
    success: function (response, operation) { 
     var data = Ext.JSON.decode(response.responseText); 
     var fields = data.value.table; 
     var records = []; 
     Ext.Array.each(fields, function (fieldArray, fieldIndex) { 
      Ext.Array.each(fieldArray, function(fieldValue, valueIndex) { 
       //Create record object if it doesn't exist 
       var record = records[valueIndex] || {}; 
       //Create a switch statement based on the array index to set fields 
       switch(fieldIndex) { 
        case 0: 
         record.User_id = fieldValue; 
         break; 
        case 1: 
         record.Username = fieldValue; 
         break; 
       } 
      }); 
     }); 

     //Add the objects to the empty store 
     store.add(records); 
    } 
}); 

这是不以任何方式生产解决方案,因为它不处理你的列表的末尾空字符串或情况,你每场获得阵列的锯齿形阵列,我可以”不要想象如何处理。如果这是你的控制或影响范围内,我会建议使用的格式更像是分机建议,因此您可以使用内置的JSON代理/读/写器或疯狂地使用它,并实现分机的远程过程调用格式:

{ 
    "success": true, 
    "message": "Success", 
    "data": [ 
     { 
      "User_id": "admin", 
      "Username": "Administrator" 
     }, { 
      "User_id": "admin", 
      "Username": "Administrator" 
     } 
    ] 
} 
+0

谢谢。是的格式是特殊的,并设置。我希望能够很容易地解析它。 – Patrick 2013-04-05 07:28:26

0

在上面的例子中,“value”是根属性。但对于JSON阅读器,它是一个属性名称(或者如果根嵌套,则是以点分隔的属性名称列表)。

所以你可以分配到你的领域,你需要以下。

字段:“table.admin”,“table.test”]

+0

没有成功 – Patrick 2013-04-05 07:24:25