花了两个小时写的测试通过的json解析返回对象的封装,虽然很多人说gson很方便,不过我觉得自己弄清楚了用起来才灵活,希望高手能够指出问题共同进步。共享出来基本上都加了注释。
package com.angico.wts.util;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* JSON数据解析类
* @author ysj
*
*/
public class JSONParse {
/**
* 解析json方法
* @param jsonStr
*/
public <T> List<T> parse(Class<T> t,String jsonStr) {
// 返回的list
List<T> list = new ArrayList<T>();
// 接收json数据的实体对象
T objT = null;
try {
// String 转成json对线
JSONObject jo = new JSONObject(jsonStr);
// 获取最外层的状态等值
int status = JsonUtility.getInteger(jo, "Info", -1);
// 如果有数据 则继续往下解析
if(true) {
// 获取list层json 数组的数据
JSONArray jsonArray = JsonUtility.getJSONArray(jo, "List");
// 通过反射获取传过来的shitibean
Field[] fields = t.getDeclaredFields();
if(jsonArray != null) {
// 如果数组不为空则循环里面的数据取出里面内容
for(int i = 0; i < jsonArray.length(); i++) {
// 实例化对象接收json的值
objT = t.newInstance();
for(Field field : fields) {
// 循环获取实体类里面的方法名 该名作为获取json的key
JSONObject obj = jsonArray.getJSONObject(i);
// 通过key获取到json里面字段的值
String value = JsonUtility.getString(obj, field.getName(), "0");
// 设置知道对象里面
setValueByName(objT,field.getName(),value);
}
// 把单个对象放到list里面
list.add((T) objT);
}
}
}
} catch (Exception e) {
System.out.println(e);
}
return list;
}
/**
* 设置值到对应的泛型对象里面
* @param object
* @param name
* @param value
*/
private static void setValueByName(Object object,String name,Object value){
// 用变量名首字母大写 拼上set就是set方法名
String methodName = "set" + Character.toUpperCase(name.charAt(0)) + name.substring(1);
try {
// 通过set方法把值设置到对象里面
object.getClass().getMethod(methodName,value.getClass()).invoke(object, value);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
2. **创建JSON解析封装类** 创建一个名为`JsonParser`的类,这个类将包含解析JSON数据的核心方法。首先定义一个Gson实例,然后编写解析方法: ```java import com.google.gson.Gson; import java.lang.reflect....
{ "msgtype":1, "id":"1,2", "person":[ { "username":"zpq", "password":"zpq", "client":1 } ,{ "username":"zxx", "password":"zxx", "client":1 }] } 封装和解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务和应用程序之间的数据传输,因为它易于阅读和编写,同时也易于机器解析和生成。在Java中,处理JSON对象通常需要依赖特定的库,本...
在这个“json解析和封装案例”中,我们将深入探讨JSON的基本概念、解析和封装方法,并通过实际的JsonDemo来加深理解。 一、JSON基本概念 1. JSON格式:JSON采用键值对(key-value pairs)的形式,键和值之间用冒号...
Newtonsoft.Json已经足够强大,易用性也没得说。但是在使用过程中存在着一个问题,如果数据不存在...JsonObject类和JsonArray类可以相互嵌套,支持原生类的JsonPath检索能力,满足Json数据解析和Json数据封装常见需求。
接收端接收到数据后,先进行解码,再用JSON解析函数还原成对象。 **四、JSON解析** 1. **错误检查**:在解析JSON字符串时,要确保字符串格式的正确性,否则会抛出语法错误。解析过程中,需捕获并处理可能出现的...
本篇文章将详细介绍如何使用C语言通过`cJSON`库对JSON进行封装和解析。 首先,`cJSON`库提供了两种基本类型,对应JSON的两种基本结构:`cJSON_Object`(JSON对象,以大括号{}表示)和`cJSON_Array`(JSON数组,以方...
本篇主要探讨JSON的封装与解析,帮助你理解并掌握这一关键技能。 一、JSON的结构与语法 1. 对象:JSON对象由大括号 `{}` 包裹,其中存储键值对,键用双引号 "" 括起,冒号 `:` 分隔键和值,各个键值对之间用逗号 `,...
android封装的json解析,可以直接解析对象或者list 如果有不明白的地方,可以联系我: QQ:840950105 Email:vipa1888@163.com Author:spring sky
本文将详细介绍如何在QT框架下,利用纯C++实现JSON的封装、解析、修改和删除。 首先,QT库提供了QJson模块,它包含了QJsonDocument、QJsonObject、QJsonArray、QJsonValue和QJsonParseError等类,这些类为我们处理...
在这个主题中,我们将深入探讨JSON数据的封装、传递以及在服务器和浏览器端的解析。 一、JSON数据封装 在客户端,我们通常使用JavaScript来创建JSON对象,这个过程称为封装。例如,假设我们有一个用户对象,包含...
二、Android中的JSON解析库 在Android中,我们通常使用以下两个库来处理JSON数据: 1. **org.json**:这是Android SDK自带的一个解析库,适用于简单的JSON操作。 2. **Gson**:Google提供的库,能将Java对象直接...
本教程将详细介绍如何在C#中进行JSON的封装和解析,以帮助开发者更好地理解和应用这些技术。 首先,我们要了解JSON的结构。JSON基于JavaScript的一个子集,它支持以下数据类型:数字、字符串、布尔值、数组、对象...
资源介绍:。易语言JSON解析模块2.0源码例程程序结合易语言扩展界面支持库和应用接口...点评:易语言JSON解析模块2.0源码通过封装JSON类形成稳定强大的json处理核心。资源作者:。天朝红雨。资源界面:。资源下载:。
四、使用Jackson进行JSON解析 1. JSON字符串转对象 使用ObjectMapper的readValue方法,将JSON字符串反序列化为User对象。 ```java String jsonString = "{\"name\":\"张三\",\"age\":30}"; User user = mapper....
本示例"JSON解析demo.zip"提供的可能是一个使用自定义封装类快速解析JSON数据的实例,这对于简化代码和提高效率非常有用。 首先,我们来了解`org.json`库中的主要类: 1. **JSONObject**:代表一个JSON对象,它由...
这里我们关注的是“PB封装json解析对象”,这涉及到两种主要的技术:Protocol Buffers (PB) 和 JSON。 Protocol Buffers(简称PB)是由Google开发的一种高效的数据序列化协议,它允许开发者定义数据结构,然后生成...
json11是一个小型且易于使用的C++ JSON解析器和生成器,它提供了将JSON字符串转换为C++对象以及反之的过程。下面我们将详细讨论如何在MFC项目中集成json11库,并实现JSON数据的解析和序列化。 首先,你需要获取json...
基于C语言实现的JSON解析器源码(含节点创建、解析、封装、输出等功能).zip课程作业-基于C语言实现的JSON解析器源码(含节点创建、解析、封装、输出等功能).zip课程作业-基于C语言实现的JSON解析器源码(含节点创建、...
android json数据的 封装与解析,代码清晰,可供参考。