【文件属性】:
文件名称:fastjson-1.2.7.jar通用json文本解析实例(轻开IOS和安卓App服务器开发)
文件大小:11.11MB
文件格式:RAR
更新时间:2019-01-18 13:19:36
fastjson
1.1 快速搭建IOS及安卓App服务器
1.2 基础知识
2 通用解析程序源码
源文件webeasy/WEB-INF/classes/JSONEasy.java
package htok.apps;
import htok.Path;
import htok.tools.*;
import htok.we.html.*;
import htok.we.*;
import javax.servlet.http.*;
import java.util.*;
import com.alibaba.fastjson.*;
public class JSONEasy extends JspEasy
{
/*/构造对象
public JSONEasy()
{
super();
}*/
public JSONEasy(HttpServletRequest request,HttpServletResponse response)
{
super(request,response);
}
//解析JSON文本
public void parseJson(String json)
{parseJson(json,"j");}
public void parseJson(String json,String prefix)
{
int pos = json.indexOf("[");
if(pos==-1)
{
try {
JSONObject jsonObj = JSON.parseObject(json);
json2Bag(jsonObj,prefix,0);
} catch (Exception e) {
getBag("pPage").set("jsonerror", "Invalid JSON format");log(e.getMessage());
}
}
else if(pos==0)
{
try {
JSONArray jsonArr = JSON.parseArray(json);
jsonArray2Bag(jsonArr,prefix,0);
} catch (Exception e) {
getBag("pPage").set("jsonerror", "Invalid JSON format");
}
}
else{
String str = json.substring(0,pos);
str = str.trim();
if(str.equals(""))
{
try {
JSONArray jsonArr = JSON.parseArray(json);
jsonArray2Bag(jsonArr,prefix,0);
} catch (Exception e) {
getBag("pPage").set("jsonerror", "Invalid JSON format");
}
}
else{
try {
JSONObject jsonObj = JSON.parseObject(json);
json2Bag(jsonObj,prefix,0);
} catch (Exception e) {
getBag("pPage").set("jsonerror", "Invalid JSON format");
}
}
}
}
public void json2Bag(JSONObject jsonObj,String prefix,int level)
{
try {
String key;
String value;
Bag b0 = new Bag(Bag.BAG);
String prefix1;
if(prefix.indexOf("0")>0)
prefix1 = new StringBuffer(prefix).append(".").append(String.valueOf(level)).toString();
else
prefix1 = new StringBuffer(prefix).append(String.valueOf(level)).toString();
setBag(prefix1,b0);//log(prefix1);
int i=0;
for (Map.Entry entry : jsonObj.entrySet())
{
key = entry.getKey();
if(!tools.canName(key)) key = new StringBuffer("_").append(key).toString();
Object ob = entry.getValue();
if(ob instanceof JSONArray)//如果下级是json数组就调jsonArray2Bag
{
jsonArray2Bag((JSONArray)ob,prefix1,i);
b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
}
else if(ob instanceof JSONObject)//如果下级是json对象就递归
{
json2Bag((JSONObject)ob,prefix1,i);
b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
}
else{//如果下级是如果是文本或值,就放进书包
value = String.valueOf(ob);
if (!value.equals(""))
b0.set(key, value);
}
i++;
}
} catch (Exception e) {
getBag("pPage").set("jsonerror", "Invalid JSON format");
}
}
public void jsonArray2Bag(JSONArray jsonArray,String prefix,int level)
{
try {
Bag b0 = new Bag(Bag.BAG);
String prefix1;
if(prefix.indexOf("0")>0)
prefix1 = new StringBuffer(prefix).append(".").append(String.valueOf(level)).toString();
else
prefix1 = new StringBuffer(prefix).append(String.valueOf(level)).toString();
setBag(prefix1,b0);//log(prefix1);
int i=0;
for(Object ob :jsonArray)
{
b0.setSuffix(i);
if(ob instanceof JSONArray)//如果下级是json数组就递归
{
jsonArray2Bag((JSONArray)ob,prefix1,i);
b0.set("v",new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
}
else if(ob instanceof JSONObject)//如果下级是json对象就生成一个以对象名为id的书包
{
int j=0;
for (Map.Entry entry : ((JSONObject)ob).entrySet())
{
String key = entry.getKey();
if(!tools.canName(key)) key = new StringBuffer("_").append(key).toString();
Object ob1 = entry.getValue();
if(ob1 instanceof JSONArray)//如果下级是json数组就调jsonArray2Bag
{
jsonArray2Bag((JSONArray)ob1,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString(),j);
b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).append(".").append(String.valueOf(j)).toString());
}
else if(ob1 instanceof JSONObject)//如果下级是json对象就递归
{
json2Bag((JSONObject)ob1,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString(),j);
b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).append(".").append(String.valueOf(j)).toString());
}
else{//如果下级是如果是文本或值,就放进书包
String value = String.valueOf(ob1);
if (!value.equals(""))
b0.set(key, value);
}
j++;
}
b0.set("v",new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
}
else{//如果下级是如果是文本或值,就放进书包
String value = String.valueOf(ob);
if (!value.equals(""))
b0.set("v", value);
}
i++;
}
} catch (Exception e) {
getBag("pPage").set("jsonerror", "Invalid JSON format");
}
}
public void log(String str)
{
Path.log("JSONEasy_",str);
}
}
3 用法
构造:JSONEasy je = new JSONEasy(request,response);
解析:je.parseJson(“{\“name\”,\”value\”}”);
3.1 结果处理
引入结果处理文件:je.show("@{sys:curPath}json2bag.html");
根书包名默认为:j0
根书包中直接按key取值,如:@{j0:name},得到value
下一级节点则从上一级节点书包中先取回书包名:
@{j0:array}
再下级节点以此类推
然后按当前节点中的key直接取值即可:@{@{pPage:array}:c1}
4 实例
解析并在网页中显示下面的json文本
文本内容
{"test":"测试的文本","array":[{"c1":"值1","c2":"值2"},{"c1":"值1","c2":"值2"},{"c1":"值1","c2":"值2"}]}
文本文件:webeasy/_samples/jspeasy/json/json2bag.json
4.1 读文本文件:
@{sys:curPath}json2bag.json
例子文件:webeasy/_samples/jspeasy/json/json2bag.htm
4.2 解析文本
<%@ page session="true" import="htok.apps.*,htok.we.html.*,htok.tools.*,htok.we.*,java.net.*"%>
<%
JSONEasy je = new JSONEasy(request,response);
je.work("@{sys:curPath}json2bag.htm");//引入读文本的文件
je.parseJson(je.equ("@{file:json}"));//解析json文本,把结果放到书包中
je.show("@{sys:curPath}json2bag.html");//输出书包中的内容
%>
例子文件:webeasy/_samples/jspeasy/json/json2bag.jsp
4.3 输出书包中的内容
测试:@{j0:test}
@{j0:array}
第@{int:@{@{pPage:array}:getSuffix}+1}行
列1:@{@{pPage:array}:c1},列2:@{@{pPage:array}:c2}
例子文件:webeasy/_samples/jspeasy/json/json2bag.html
4.4 效果