`
easonfans
  • 浏览: 254048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

怎样获得JSON语句中的属性值

阅读更多

How to read property's value in JSON --怎样获得JSON语句中的属性值

来源:http://extjs.com/forum/showthread.php?t=15875

paging.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
<title>Paging Grid Example</title>  
  
<link rel="stylesheet" type="text/css" href="../../resources/css/ext-all.css" />  
  
    <!-- GC -->  
        <!-- LIBS -->  
        <script type="text/javascript" src="../../adapter/ext/ext-base.js"></script>  
    <script type="text/javascript" src="../../ext-all-debug.js"></script>  
        <!-- ENDLIBS -->  
  
    <script type="text/javascript" src="../../ext-all.js"></script>  
       
<script type="text/javascript" src="paging.js"></script>  
<link rel="stylesheet" type="text/css" href="grid-examples.css" />  
  
<!-- Common Styles for the examples -->  
<link rel="stylesheet" type="text/css" href="../examples.css" />  
</head>  
<body>  
<script type="text/javascript" src="../examples.js"></script><!-- EXAMPLES -->  
<h1>Paging Grid Example</h1>  
<p>This example shows how to create a grid with paging. This grid uses a ScriptTagProxy to fetch cross-domain   
    remote data (from the Ext forums).</p>  
<p>Note that the jsis not minified so it is readable. See <a href="paging.js">paging.js</a>.</p>  
<!--    <a href="#" onclick="Ext.log('Hello from the Ext console.');return false;"><img src="inspector.gif" width="600" height="337" style="margin:15px;"/></a>  
-->  
<div id="topic-grid"></div>  
  
</body>  
</html>  

paging.js:

Ext.onReady(function(){   
  
    // create the Data Store   
    var ds = new Ext.data.Store({   
        // load using script tags for cross domain, if the data in on the same domain as   
        // this page, an HttpProxy would be better   
        proxy: new Ext.data.HttpProxy({   
            url: 'a.jsp'//'http://extjs.com/forum/topics-browse-remote.php'   
        }),   
  
        // create reader that reads the Topic records   
        reader: new Ext.data.JsonReader({   
            root: 'topics',   
            totalProperty: 'totalCount',   
            id: 'threadid'   
        }, [   
            'title', 'forumtitle', 'forumid', 'author',   
            {name: 'replycount', type: 'int'},   
            {name: 'lastpost', mapping: 'lastpost', type: 'date', dateFormat: 'timestamp'},   
            'lastposter', 'excerpt'   
        ]),   
  
        // turn on remote sorting   
        remoteSort: true   
    });   
    ds.setDefaultSort('lastpost', 'desc');   
  
    // pluggable renders   
    function renderTopic(value, p, record){   
        return String.format(   
                '<b><a href="http://extjs.com/forum/showthread.php?t={2}" target="_blank">{0}</a></b><a href="http://extjs.com/forum/forumdisplay.php?f={3}" target="_blank">{1} Forum</a>',   
                value, record.data.forumtitle, record.id, record.data.forumid);   
    }   
    function renderLast(value, p, r){   
        return String.format('{0}   
by {1}', value.dateFormat('M j, Y, g:i a'), r.data['lastposter']);   
    }   
  
    // the column model has information about grid columns   
    // dataIndex maps the column to the specific data field in   
    // the data store   
    var cm = new Ext.grid.ColumnModel([{   
           id: 'topic', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })   
           header: "Topic",   
           dataIndex: 'title',   
           width: 420,   
           renderer: renderTopic   
        },{   
           header: "Author",   
           dataIndex: 'author',   
           width: 100,   
           hidden: true   
        },{   
           header: "Replies",   
           dataIndex: 'replycount',   
           width: 70,   
           align: 'right'   
        },{   
           id: 'last',   
           header: "Last Post",   
           dataIndex: 'lastpost',   
           width: 150,   
           renderer: renderLast   
        }]);   
  
    // by default columns are sortable   
    cm.defaultSortable = true;   
  
    var grid = new Ext.grid.GridPanel({   
        el:'topic-grid',   
        width:700,   
        height:500,   
        title:'ExtJS.com - Browse Forums',   
        store: ds,   
        cm: cm,   
        trackMouseOver:false,   
        sm: new Ext.grid.RowSelectionModel({selectRow:Ext.emptyFn}),   
        loadMask: true,   
        viewConfig: {   
            forceFit:true,   
            enableRowBody:true,   
            showPreview:true,   
            getRowClass : function(record, rowIndex, p, ds){   
                if(this.showPreview){   
                    p.body = '<p>'+record.data.excerpt+'</p>';   
                    return 'x-grid3-row-expanded';   
                }   
                return 'x-grid3-row-collapsed';   
            }   
        },   
        bbar: new Ext.PagingToolbar({   
            pageSize: 25,   
            store: ds,   
            displayInfo: true,   
            displayMsg: 'Displaying topics {0} - {1} of {2}',   
            emptyMsg: "No topics to display",   
            items:[   
                '-', {   
                pressed: true,   
                enableToggle:true,   
                text: 'Show Preview',   
                cls: 'x-btn-text-icon details',   
                toggleHandler: toggleDetails   
            }]   
        })   
    });   
  
    // render it   
    grid.render();   
  
    // trigger the data store load   
    ds.load({params:{start:0, limit:25, forumId: 4}});   
  
    function toggleDetails(btn, pressed){   
        var view = grid.getView();   
        view.showPreview = pressed;   
        view.refresh();   
    }   
});

a.jsp:

<%@page contentType="text/html; charset=UTF-8"%>   
<%@page import="org.json.simple.*"%>   
<%   
  JSONObject obj = new JSONObject();   
  JSONArray array = new JSONArray();   
  JSONObject sub = new JSONObject();   
  sub.put("threadid", new Integer(12313));   
  sub.put("forumid", new Integer(32132));   
  sub.put("forumtitle", "help");   
  sub.put("title", "EditorGrid saving data in FF, but not IE (no errors, hard to debug)");   
  sub.put("author", "stevefink");   
  sub.put("lastposter", "stevefink");   
  sub.put("lastpost", new Integer(1192160261));   
  sub.put("excerpt", "Hi all");   
  sub.put("replycount", new Integer(0));   
  array.add(sub);   
  JSONObject sub2 = new JSONObject();   
  sub2.put("threadid", new Integer(12314));   
  sub2.put("forumid", new Integer(32132));   
  sub2.put("forumtitle", "help");   
  sub2.put("title", "EditorGrid saving data in FF, but not IE (no errors, hard to debug)");   
  sub2.put("author", "stevefink");   
  sub2.put("lastposter", "stevefink");   
  sub2.put("lastpost", new Integer(1192160261));   
  sub2.put("excerpt", "Hi all");   
  sub2.put("replycount", new Integer(0));   
  array.add(sub2);   
  obj.put("topics", array);   
  obj.put("status", new Integer(1));   
  obj.put("totalCount", new Integer(111));   
  out.print(obj);   
%>

a.jsp's return value:

{"totalCount":111,"status":1,"topics":[{"forumid":32132,"title":"EditorGrid saving data in FF, but not IE (no errors, hard to debug)","replycount":0,"lastposter":"stevefink","excerpt":"Hi all","forumtitle":"help","threadid":12313,"lastpost":1192160261,"author":"stevefink"},{"forumid":32132,"title":"EditorGrid saving data in FF, but not IE (no errors, hard to debug)","replycount":0,"lastposter":"stevefink","excerpt":"Hi all","forumtitle":"help","threadid":12314,"lastpost":1192160261,"author":"stevefink"}]} 
源码如上:
原文中要获得JSON语句中的‘status’的属性值。在那篇文章的讨论中,有两种方法可以解决这个问题。在我的上一篇日志()中提到了一种方法,但是实际在解决中并不能运行,常报错:“是未定义或者空对象”之所以出现这种情况是因为数据还没有加载那(ds的load函数并没有立刻执行,而是在render()函数执行之后,延迟加载),这个问题有两种解法:
一:另外举个数据。
相应的store编码:
        reader: new Ext.data.JsonReader({

            
root'topics',

            
successProperty'success',  //add this

            
totalProperty'totalCount',

            
id'threadid'

        
}, [

            
'title''forumtitle''forumid''author',

            {
name'replycount'type'int'},

            {
name'lastpost'mapping'lastpost'type'date'dateFormat'timestamp'},

            
'lastposter''excerpt'

        
]), 
相应的json语句:
{"message":"something wrong","totalCount":11,"success":false

对应的访问方法:
ds.load(

    {
params:{start:0limit:25forumId4}},

    {
callback:function(storeoptionssuccess){

    if(
success){

       
alert("success");

       
//Do something here, like grid.render();  

       
return;

    }

    else{

       
alert(store.reader.jsonData.message);

    }

  }

});
另外一种解决方法:
ds.on('load', function(store, records, options) {
    if(!store.reader.jsonData.success) {
        ds.removeAll();
        Ext.Msg.alert('Status', store.reader.jsonData.message);
    }
});
 

这样子就行了!!!

感谢那个外国帖子!


分享到:
评论

相关推荐

    JsonSQL:用SQL语句解析JSON文件

    1. **SELECT**: 用于选择要返回的JSON属性或值。例如,`SELECT data.name FROM json` 会返回JSON对象中名为"data"的属性的"name"子属性。 2. **FROM**: 定义JSON数据源。如 `FROM json` 指示JsonSQL从名为"json"的...

    Oracle 获取JSON字符串对象的属性值

    这两种方法都能有效地从JSON字符串中提取属性值,但`REGEXP_REPLACE()`更适用于复杂或有规律的JSON格式,而基于`instr()`的方案则适用于简单的字符串处理,且在某些情况下可能更高效。然而,Oracle从12c版本开始提供...

    Spark SQL操作JSON字段的小技巧

    例如,要从 `{"k": "foo", "v": 1.0}` 这个JSON对象中获取 "k" 的值,可以使用 `select get_json_object('{"k": "foo", "v": 1.0}', '$.k') as k`。然而,这种方法对于提取多个字段并不理想,因为每个字段都需要单独...

    js中动态创建json,动态为json添加属性、属性值的实例

    在JavaScript编程中,动态创建JSON对象以及向其中添加属性和属性值是一种常见的操作。在本实例中,将通过具体的代码和说明来演示如何动态地构建一个JSON对象,以及如何利用JavaScript的特性来为JSON对象动态添加属性...

    代码生成器-JSON转OBJC实体类

    这个工具会分析输入的JSON数据结构,自动生成相应的Objective-C实体类,这些实体类通常包含了属性(对应JSON中的键)和getter/setter方法。例如,如果JSON中有如下数据: ```json { "name": "John Doe", "age": ...

    使用Json传值的示例

    在IT领域,特别是Web开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但独立于语言和平台,被广泛用于服务器与...

    mybatis中操作json类型数据(csdn)————程序.pdf

    在MyBatis中,操作JSON类型数据涉及到对MySQL数据库中JSON字段类型的映射和转换,以便于在Java代码中能够方便地处理这些数据。这里,我们主要关注如何自定义TypeHandler来实现这一功能。 首先,MySQL引入了JSON类型...

    json-taglib 使用方法

    属性名称通过`name`属性指定,而属性值则通过`value`属性指定。此外,还可以使用`trim`属性控制是否去除字符串两端的空白字符,默认情况下为`true`。 ```jsp &lt;json:object&gt; &lt;json:property name="string1" value=...

    json2 使用方法

    现在,`jsonObj`就是一个拥有`name`、`age`和`city`属性的对象,可以方便地访问其属性值。 2. **JSON.stringify()**: `JSON.stringify()`则是用于将JavaScript值转换成JSON字符串。例如,有一个JavaScript对象`...

    用循环或if语句从json中取数据示例

    标题中提到的“用循环或if语句从json中取数据示例”,主要涉及以下两个方面: 1. 循环遍历JSON数组: 当JSON数据结构包含数组时,我们需要使用循环(如for循环)来遍历数组中的每个元素。例如,在给定的描述中,有...

    js操作json

    在面向对象的语言中,key 为对象的属性,value 为对应的属性值。因此,可以使用对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象等几种。 数组在 JavaScript 中是中括号“[]”括起来的内容,...

    json拼接和解析

    2. **数据类型**:JSON仅支持以下数据类型:数字(整数或浮点数)、字符串(在双引号中)、布尔值、null、数组(方括号中)和对象(花括号中)。JavaScript中的函数和日期等复杂类型无法直接转换为JSON,需要进行...

    Json页面总结

    - 第二个参数(可选):一个函数或一个数组,用于指定哪些属性应该被包含在 JSON 字符串中。 - 第三个参数(可选):用于控制输出格式的空格或制表符的数量。 - **注意点**: - `JSON.stringify()` 不能序列化...

    Delphi中JSon_SuperObject_使用数据集与JSON对象互转

    通过遍历“Data”数组中的每一条记录,调用`Append`方法向数据集添加新记录,并使用假设的`GetValue2Field`函数将JSON中的值填充到对应字段。 #### 总结 通过上述实现,我们能够方便地在Delphi中使用`JSon_Super...

    MFC/VC控制台下使用json库

    - 解析后的JSON对象通常是一个可遍历的数据结构,可以访问其属性和值。例如,`json_object["key"]`将获取名为"key"的值。 4. **序列化和写入JSON**: - 要将C++对象转换为JSON并写入文件,可以使用库提供的序列化...

    Delphi Json 解析器

    - `GetObject`, `GetArray`, `GetString`, `GetInt`, `GetBool`, `GetFloat`等方法,用于访问解析后的JSON对象的属性,根据类型返回相应的值。 - `AddObject`, `AddArray`, `AddValue`等方法,用于构建新的JSON对象...

    delphi 使用json 示例

    在Delphi中,可以使用TJSONObject的ParseJSONValue方法将JSON字符串解析为一个JSON值(TJSONValue): ```delphi var JSONValue: TJSONValue; JSONObject: TJSONObject; begin JSONValue := TJSONObject....

    js 将json字符串转换为json对象

    在上面的例子中,`JSON.parse()`将JSON字符串解析成了一个JavaScript对象,可以方便地通过点号或方括号访问其属性。 然而,需要注意的是,`JSON.parse()`在处理非法JSON字符串时会抛出错误。为了处理这种情况,建议...

    VBJSON for VB6 类

    2. **操作JSON对象**:通过VB6的语法对解析后的JSON对象进行增删改查,如修改某个属性值,遍历数组或字典。 3. **保存JSON数据**:将处理后的JSON对象使用`WriteJSON`方法转换回字符串,然后写入文件或发送到Web服务...

    spring-mybatis-mysql-json

    例如,`-&gt;`操作符用于访问JSON对象的属性,`JSON_EXTRACT`函数用于提取JSON对象的值,而`JSON_INSERT`、`JSON_REPLACE`和`JSON_REMOVE`等函数则用于修改JSON数据。 接下来,MyBatis是一个优秀的Java持久层框架,它...

Global site tag (gtag.js) - Google Analytics