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:0, limit:25, forumId: 4}},
{callback:function(store, options, success){
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);
}
});
这样子就行了!!!
感谢那个外国帖子!
分享到:
相关推荐
这两种方法都能有效地从JSON字符串中提取属性值,但`REGEXP_REPLACE()`更适用于复杂或有规律的JSON格式,而基于`instr()`的方案则适用于简单的字符串处理,且在某些情况下可能更高效。然而,Oracle从12c版本开始提供...
1. **SELECT**: 用于选择要返回的JSON属性或值。例如,`SELECT data.name FROM json` 会返回JSON对象中名为"data"的属性的"name"子属性。 2. **FROM**: 定义JSON数据源。如 `FROM json` 指示JsonSQL从名为"json"的...
例如,要从 `{"k": "foo", "v": 1.0}` 这个JSON对象中获取 "k" 的值,可以使用 `select get_json_object('{"k": "foo", "v": 1.0}', '$.k') as k`。然而,这种方法对于提取多个字段并不理想,因为每个字段都需要单独...
在JavaScript编程中,动态创建JSON对象以及向其中添加属性和属性值是一种常见的操作。在本实例中,将通过具体的代码和说明来演示如何动态地构建一个JSON对象,以及如何利用JavaScript的特性来为JSON对象动态添加属性...
这个工具会分析输入的JSON数据结构,自动生成相应的Objective-C实体类,这些实体类通常包含了属性(对应JSON中的键)和getter/setter方法。例如,如果JSON中有如下数据: ```json { "name": "John Doe", "age": ...
在IT领域,特别是Web开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但独立于语言和平台,被广泛用于服务器与...
在MyBatis中,操作JSON类型数据涉及到对MySQL数据库中JSON字段类型的映射和转换,以便于在Java代码中能够方便地处理这些数据。这里,我们主要关注如何自定义TypeHandler来实现这一功能。 首先,MySQL引入了JSON类型...
属性名称通过`name`属性指定,而属性值则通过`value`属性指定。此外,还可以使用`trim`属性控制是否去除字符串两端的空白字符,默认情况下为`true`。 ```jsp <json:object> <json:property name="string1" value=...
现在,`jsonObj`就是一个拥有`name`、`age`和`city`属性的对象,可以方便地访问其属性值。 2. **JSON.stringify()**: `JSON.stringify()`则是用于将JavaScript值转换成JSON字符串。例如,有一个JavaScript对象`...
标题中提到的“用循环或if语句从json中取数据示例”,主要涉及以下两个方面: 1. 循环遍历JSON数组: 当JSON数据结构包含数组时,我们需要使用循环(如for循环)来遍历数组中的每个元素。例如,在给定的描述中,有...
- 解析后的JSON对象通常是一个可遍历的数据结构,可以访问其属性和值。例如,`json_object["key"]`将获取名为"key"的值。 4. **序列化和写入JSON**: - 要将C++对象转换为JSON并写入文件,可以使用库提供的序列化...
在面向对象的语言中,key 为对象的属性,value 为对应的属性值。因此,可以使用对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象等几种。 数组在 JavaScript 中是中括号“[]”括起来的内容,...
2. **数据类型**:JSON仅支持以下数据类型:数字(整数或浮点数)、字符串(在双引号中)、布尔值、null、数组(方括号中)和对象(花括号中)。JavaScript中的函数和日期等复杂类型无法直接转换为JSON,需要进行...
- 第二个参数(可选):一个函数或一个数组,用于指定哪些属性应该被包含在 JSON 字符串中。 - 第三个参数(可选):用于控制输出格式的空格或制表符的数量。 - **注意点**: - `JSON.stringify()` 不能序列化...
通过遍历“Data”数组中的每一条记录,调用`Append`方法向数据集添加新记录,并使用假设的`GetValue2Field`函数将JSON中的值填充到对应字段。 #### 总结 通过上述实现,我们能够方便地在Delphi中使用`JSon_Super...
- `GetObject`, `GetArray`, `GetString`, `GetInt`, `GetBool`, `GetFloat`等方法,用于访问解析后的JSON对象的属性,根据类型返回相应的值。 - `AddObject`, `AddArray`, `AddValue`等方法,用于构建新的JSON对象...
在Delphi中,可以使用TJSONObject的ParseJSONValue方法将JSON字符串解析为一个JSON值(TJSONValue): ```delphi var JSONValue: TJSONValue; JSONObject: TJSONObject; begin JSONValue := TJSONObject....
在上面的例子中,`JSON.parse()`将JSON字符串解析成了一个JavaScript对象,可以方便地通过点号或方括号访问其属性。 然而,需要注意的是,`JSON.parse()`在处理非法JSON字符串时会抛出错误。为了处理这种情况,建议...
2. **操作JSON对象**:通过VB6的语法对解析后的JSON对象进行增删改查,如修改某个属性值,遍历数组或字典。 3. **保存JSON数据**:将处理后的JSON对象使用`WriteJSON`方法转换回字符串,然后写入文件或发送到Web服务...
例如,`->`操作符用于访问JSON对象的属性,`JSON_EXTRACT`函数用于提取JSON对象的值,而`JSON_INSERT`、`JSON_REPLACE`和`JSON_REMOVE`等函数则用于修改JSON数据。 接下来,MyBatis是一个优秀的Java持久层框架,它...