jqGrid获取json数据方法

简介:

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#data_manipulation

jqGrid是个好东西,自己百度即可知道。

先声明一下,jquery从1.4开始,对json数据格式要求很严格,不允许使用''单引号,必须使用""双引号。

要获取json数据时,调用方式通常如下:

  $(function () { 
                $("#list47").jqGrid({ 
  url:'./AjaxHandler/jqGrid_Jsondata_Content.ashx?page=2', 
                    datatype: "json", 
                    height: "auto", 
                    rowNum: 30, 
                    colNames: ['nothing1', 'nothing2', 'nothing3'], 
                    colModel: [ 
{ name: 'content', index: 'content', 350, sorttype: "string" }, 
{ name: 'author', index: 'author', 80, sorttype: "string", formatter: "string" }, 
{ name: 'datetime', index: 'datetime', 80, sorttype: "string", formatter: "string" } 
], 
                    pager: "#plist47", 
                    viewrecords: true, 
sortorder: "desc" 
                }); 
            });

这里的json格式是很讲究的,必须遵循官方文档约定的格式,不能自由。可选的数据类型为json or jsonp, (or jsonstring) 
jqgrid读取json的时候,需要配置jsonReader才能读取,不过jsonReader有默认值,通常不需要做配置。 
jsonReader默认值如下 
jQuery("#gridid").jqGrid({ 
... 
   jsonReader : { 
     root: "rows", //root这里的值是rows,意味着它会读取json中的rows键的值,这个值就是真实的数据 
     page: "page", //root这里的值是page,意味着它会读取json中的page键的值,当前页号     total: "total",//总的页数 
     records: "records",//总记录数 
     repeatitems: true,//如果设为false,则jqGrid在解析json时,会根据name来搜索对应的数据元素(即可以json中元素可以不按顺序);而所使用的name是来自于colModel中的name设定。   
     cell: "cell", 
     id: "id", 
     userdata: "userdata", 
     subgrid: {root:"rows", 
        repeatitems: true, 
       cell:"cell" 
     } 
   }, 
... 
});

 

RVD0Q9NR3_`9PY5NA%T~2N1

 

如果数据类型是json,那么默认的期望得到的json字符串格式{ 
  "total": "xxx", 
  "page": "yyy", 
  "records": "zzz", 
  "rows" : [ 
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, 
    {"id" :"2", "cell":["cell21", "cell22", "cell23"]}, 
      ... 
  ] 
}

root元素

这个root是描述数据在开始,也就是说root指明了一个包含数据的数组。如果我们设置如下: 
jQuery("#gridid").jqGrid({ 
... 
   jsonReader : {root:"invdata"}, 
... 
});那么返回的json字符串应该如下: 

  "total": "xxx", 
  "page": "yyy", 
  "records": "zzz", 
  "invdata" : [ 
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, 
    {"id" :"2", "cell":["cell21", "cell22", "cell23"]}, 
      ... 
  ] 
}

page,total,records

元素描述了pager需要的信息,如果jsonReader如下设置jQuery("#gridid").jqGrid({ 
... 
   jsonReader : { 
      root:"invdata", 
      page: "currpage", 
      total: "totalpages", 
      records: "totalrecords
   }, 
... 
});那么期望得到的json字符串如下:


  "totalpages": "xxx", 
  "currpage": "yyy", 
  "totalrecords": "zzz", 
  "invdata" : [ 
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, 
    {"id" :"2", "cell" :["cell21", "cell22", "cell23"]}, 
      ... 
  ] 
}

cell

元素描述了包含行数据的数组,如果jsonReader如下设置jQuery("#gridid").jqGrid({ 
... 
   jsonReader : { 
      root:"invdata", 
      page: "currpage", 
      total: "totalpages", 
      records: "totalrecords", 
      cell: "invrow
   }, 
... 
});那么期望得到的json字符串如下: 

  "totalpages": "xxx", 
  "currpage": "yyy", 
  "totalrecords": "zzz", 
  "invdata" : [ 
    {"id" :"1", "invrow" :["cell11", "cell12", "cell13"]}, 
    {"id" :"2", "invrow" :["cell21", "cell22", "cell23"]}, 
      ... 
  ] 
}id此元素描述了每一行的唯一的id值,如果jsonReader如下设置jQuery("#gridid").jqGrid({ 
... 
   jsonReader : { 
      root:"invdata", 
      page: "currpage", 
      total: "totalpages", 
      records: "totalrecords", 
      cell: "invrow", 
      id: "invid
   }, 
... 
}); 
那么期望得到的json字符串如下: { 
  "totalpages": "xxx", 
  "currpage": "yyy", 
  "totalrecords": "zzz", 
  "invdata" : [ 
    {"invid" :"1", "invrow" :["cell11", "cell12", "cell13"]}, 
    {"invid" :"2", "invrow" :["cell21", "cell22", "cell23"]}, 
      ... 
  ] 
}

可以将cell元素设置为空字符串,也可以将id设置为数字,如果这样的话,例子如下 
jQuery("#gridid").jqGrid({ 
... 
   jsonReader : { 
      root:"invdata", 
      page: "currpage", 
      total: "totalpages", 
      records: "totalrecords", 
      cell: "", 
    id: "0" 设为数字的话,rowid=第0个格子的内容,此处rowid=cell11,rowid=cell21 
   }, 
... 
});这样的话,id就是行数据的第一个元素


  "totalpages" : "xxx", 
  "currpage" : "yyy", 
  "totalrecords" : "zzz", 
  "invdata" : [ 
    ["1", "cell11", "cell12", "cell13"], 
["2", "cell21", "cell22", "cell23"], 
      ... 
  ] 
}

repeatitems 
此元素设置为ture,则cell里的元素顺序和colModel的顺序一致,按顺序显示。如果要让jqGrid根据json数据搜素元素,则把repeatable设置为false,此时设置cell属性无意义。 
jQuery("#gridid").jqGrid({... 
   jsonReader : { 
      root:"invdata", 
      page: "currpage", 
      total: "totalpages", 
      records: "totalrecords", 
      repeatitems: false, 
      id: "0" 
   }, 
... 
});

期望的json字符串如下: 

  "totalpages" : "xxx", 
  "currpage" : "yyy", 
  "totalrecords" : "zzz", 
  "invdata" : [ 
    {"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13", "total" :"1234", "note" :"somenote"}, 
  {"invid" : "2","invdate":"cell21", "amount" :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"}, 
      ... 
  ] 

此时,id就是第0个元素,即invid的值

总结的说 repeatitems是true的情况下, id是数字表示rowdata里面的位置,即cell里的位置,repeatitems是false的情况下, id是数字直接代表在json里面的位置。repeatitems:false 设为false是很有用的,这样的话就不必按照colModel的顺序来组件model。 

"totalpages" : "xxx", 
"currpage" : "yyy", " 
totalrecords" : "zzz", 
"invdata" : 

     {"invid" :"1", "invdate" : "cell11", "note" :"somenote"}, 
     {"invid" :"2", "amount" : "cell22", "tax" :"cell23", "total" :"2345"}, ... 

}

JSON String 
如果datatype设置为jsonstring,和json是差不多的,只不过需要在本地构造一个json字符串,而不是通过ajax方式获得。 
使用json数据的时候,可以使用name.notation这种形式。例子如下:(repeatitems=false) 
colModel:[ 
   {name:'name',label:'Name', true}, 
   {name:'id', sorttype:"int", editable: true}, 
   {name:'email',label:'Email', true,formatter:'email'}, 
   {name:'stock',label:'Stock', align:"center", editable: true,formatter:'checkbox',edittype:"checkbox"}, 
{name:'item.price',label:'Price', align:"right", editable: true,formatter:'currency'}, 
{name:'item.weight',label:'Weight', align:"right", editable: true,formatter:'number'}, 
   {name:'ship',label:'Ship Via', editable: true,formatter:'select', edittype:"select",editoptions: {value:"2:FedEx;1:InTime;3:TNT;4:ARK;5:ARAMEX"}},      
   {name:'note',label:'Notes', sortable:false,editable: true,edittype:"textarea", editoptions:{rows:"2",cols:"20"}}    
],

期望的json格式如下 

   "page":"1", 
   "total":2, 
   "records":"13", 
   "rows":[ 
      {"id":"12345","name":"Desktop Computers","email":"josh@josh.com","item":{"price":"1000.72", "weight": "1.22" }, "note": "note", "stock": "0","ship": "1"}, 
      {"id":"23456","name":"<var>laptop</var>","note":"Long text ","stock":"yes","item":{"price":"56.72", "weight":"1.22"},"ship": "2"}, 
      {"id":"34567","name":"LCD Monitor","note":"note3","stock":"true","item":{"price":"99999.72", "weight":"1.22"},"ship":"3"}, 
      {"id":"45678","name":"Speakers","note":"note","stock":"false","ship":"4"} 
    ] 
}

通常jsonReader中的一些参数值可以从服务器端获得,但是某些情况下,也可以使用函数来获得,具体例子如下: 
jsonReader: { 
repeatitems: false, 
id: "Id", 
root: function (obj) { return obj; }, 
page: function (obj) { return 1; }, 
total: function (obj) { return 1; }, 
records: function (obj) { return obj.length; } 

obj 是从服务器端获得的响应。

 













本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/770983 ,如需转载请自行联系原作者

相关文章
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
21天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
23天前
|
JSON JavaScript 前端开发
|
25天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
1月前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
18天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
2月前
|
JSON API 数据格式
商品详情数据JSON格式示例参考(api接口)
JSON数据格式的商品详情数据通常包含商品的多个层级信息,以下是一个综合多个来源信息的JSON数据格式的商品详情数据示例参考:
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
48 1
|
2月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!