JSON(三:json形式データ解析)
9061 ワード
書式1
説明:
バックグラウンドはStringBufferでデータを接続します.
フロントエンドはstruts 2構成ページでジャンプし、s:propertyラベルで対応する値を取得します(setterメソッドとgetterメソッドで対応する変数を設定します).
{'key':[
{'key1':'value1'},
{'key2':'value2'},
......
]
}
StringBuffer sbf = new StringBuffer();
sbf.append("{'data' : ");
try{
if (null == tVisitResult) {
sbf.append("'no_result'");
} else {
int storeId = null == tVisitResult.getStoreId() ? 0 : tVisitResult.getStoreId();
TStore store = this.visitResultService.getById(TStore.class, storeId);
sbf.append("[");
// store
sbf.append("{'name' : '");
sbf.append(store.getName());
sbf.append("', 'lon' : '");
sbf.append(store.getGisX());
sbf.append("', 'lat' : '");
sbf.append(store.getGisY());
sbf.append("'}, ");
// check in gis
sbf.append("{'name' : 'CheckIn', 'lon' : '116.45733', 'lat' : '39.91993'}, ");
// check out gis
sbf.append("{'name' : 'CheckOut', 'lon' : '116.46233', 'lat' : '39.95293'} ");
//
sbf.append("]");
}
sbf.append("}");
} catch (Exception e) {
e.printStackTrace();
}
{'data' : [
{'name' : ' A', 'lon' : '116.45724121462', 'lat' : '39.919978035546'},
{'name' : 'CheckIn', 'lon' : '116.45733', 'lat' : '39.91993'},
{'name' : 'CheckOut', 'lon' : '116.46233', 'lat' : '39.95293'}
]
}
var data = "<s:property value='jsonData'/>";
var content = eval("("+data+")");
if ('no_store' == $.trim(result)) {
return false;
}
for (var i in result) {
if (typeof(result[i]) == "object") {
if ("" == $.trim(result[i].lon)) {
continue;
}
alert("name : " + result[i].name + "\tlon : " + result[i].lon + "\tlat : " + result[i].lat);
}
}
説明:
次の場合
{'name' : 'CheckOut', 'lon' : '116.46233', 'lat' : '39.95293'}
書式の一重引用符を二重引用符に変更
{\"name\" : \"CheckOut\", \"lon\" : \"116.46233\", \"lat\" : \"39.95293\"}
解析のプロセスは
var data = '<s:property value="jsonData" escape="false"/>'
フォーマット2
JSONObject jsonObject = new JSONObject();
StringBuffer json = new StringBuffer();
for (VisitPlanInfo planInfo : this.visitPlanInfoList) {
//
FilterWrapper cancelFilter = new FilterWrapper();
cancelFilter.addFilter("companyId", userInfo.getCompanyId(), Filter.EQ);
cancelFilter.addFilter("planId", planInfo.gettVisitPlan().getPlanId());
cancelFilter.addFilter("visitNo", planInfo.getVisitNo());
cancelFilter.addFilter("visitStatus", VISIT_PLAN_CANCEL, Filter.EQ);
cancelFilter.addFilter("isDelete", IS_DELETE_NO, Filter.EQ);
List<TVisitResult> results = this.visitResultService.getEntitiesByFilter(TVisitResult.class, cancelFilter);
//
json.append("'pno_");
json.append(planInfo.gettVisitPlan().getPlanId());
json.append("_");
json.append(planInfo.getVisitNo());
json.append("' : ");
if (null == results || results.size() <= 0) { //
json.append("'no'");
} else { //
json.append("'");
for (TVisitResult tr : results) {
json.append(tr.getStoreName());
json.append("; ");
}
json.append("'");
}
json.append(", ");
}
log.info("json : " + json);
if (json.length() > 0) {
if (json.lastIndexOf(",") > 0) {
json = json.deleteCharAt(json.lastIndexOf(","));
}
jsonObject.put("data", "{" + json.toString() + "}");
} else {
jsonObject.put("data", "none");
}
this.setJsonStores(jsonObject.toString());
{"data":{
"pno_1568_1" : " A;",
"pno_1560_1" : " A; B;",
"pno_1420_10" : " B; C;",
"pno_1565_1" : " A"
}
}
var data = <s:property value="jsonStores"/>;
// s:property
説明:
ここではeval("("+")")で解析する必要はありません.id値がpno_に入力された場合1565_1(id=pno_1565_1)ではdata.Data[id]の値は「魯春利テスト店A」である.
フォーマット3
Ajax方式で取得し、戻りタイプはsetContentType(「text/json;charset=UTF-8」);
List<TUser> users = ......
String json = JSONArray.fromCollection(users).toString();
out.print(json);
$.post(url, null, function(data){
var content = eval("(" + data + ")");
for (i in content) {
alert(content[i].name + "\t" + content[i].phoneNo);
}
}
web :
[
{
"userId":10056,
"name":"grady",
"status":"1",
"password":"grms123",
"phoneNo":"12345678901",
"isDelete":"0",
"companyId":9
},
{
"userId":10160,
"name":"wangxiaojie",
"status":"1",
"password":"grms123",
"phoneNo":"18910858581",
"isDelete":"0",
"companyId":9
}
]
フォーマット4
var json = "{
'results' : [
{
'id' : 12,
'name' : ' ',
'shortname' : ' ...',
'boundary' : '',
'centerPoint' : ' ',
'lon' : '116.22391',
'lat' : '39.88617',
'shape' : '0.0',
'diameter' : '3000'
},{
'id' : 13,
'name' : ' ',
'shortname' : ' ...',
'boundary' : '[
{\"bname\":\" \",\"lon\":\"116.13296\",\"lat\":\"40.02321\"},
{\"bname\":\" \",\"lon\":\"116.151\",\"lat\":\"39.99931\"},
{\"bname\":\" \",\"lon\":\"116.21614\",\"lat\":\"39.97753\"}
]',
'centerPoint' : 'null',
'lon' : 'null',
'lat' : 'null',
'shape' : '0.0',
'diameter' : '0'
}
]
}";
var obj = eval("(" + json + ")");
var data = obj.results;
for (var i in data) {
if (typeof(data[i]) == "object") {
if(null == data[i].boundary || "" == $.trim(data[i].boundary)) {
//......
} else {
//
var bound = data[i].boundary;
/*
var k = 0;
str = '';
while(bound.indexOf("\"") != -1) {
k = bound.indexOf("\"");
bound = bound.replace("\"", "'");
str += bound.substr(0, k + 1);
bound = bound.substr(k + 1);
}
str += bound;
*/
var str = bound.replace(/\"/g, "'"); // /\"/g
var jsonNew = eval("(" + str + ")");
//str JSON
// replaceAll
}
}
}