- 浏览: 764836 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
飞出四季做的茧:
z赞
JAVA日期格式化字符串的24小时制 -
daniaowansui:
亲测,可行!
JS 在open打开的窗口中调用父页面JS方法 -
zh_123:
ie9测试过吗貌似列不能冻结啊!
Css 实现的表头, 表列冻结, 可以超大数据量 -
Jxdwuao:
IXR 写道少年,在哪里混呢?在虹桥机场这边阿, 兄弟你在何方 ...
修改JS文件FF刷新不生效 -
IXR:
少年,在哪里混呢?
修改JS文件FF刷新不生效
在处理 JSON 的过程中, 往往要面对着解析和转换 ,异常处理的问题 。
普通的处理流程 :
HttpClient client = new HttpClient(); String strUrl = CommonConstant.getBatchShowAssociationURL() + parm; PostMethod method = new PostMethod(strUrl); List<AssociationVO> associationList = new ArrayList<AssociationVO>(); try { client.executeMethod(method); } catch (HttpException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } String returnJson = ""; try { returnJson = method.getResponseBodyAsString();// 返回json字符串值 String strJson = returnJson.replace("?(", "").replace(")", "").replace(";", ""); if (strJson.startsWith("{")) { JSONObject jsonObject = JSONObject.fromObject(strJson); String code = jsonObject.getString("code").toString(); if ("200".equals(code)) { JSONArray jsonArray = JSONArray.fromObject(jsonObject.get("result")); for (int i = 0, len = jsonArray.size(); i < len; i++) { AssociationVO vo = new AssociationVO(); JSONObject jsonClub = jsonArray.getJSONObject(i); vo.setId(Long.valueOf(jsonClub.get("id").toString())); associationList.add(vo); } } } } catch (Exception e1) { e1.printStackTrace(); } finally { // 使用完成后要释放链接 method.releaseConnection(); }
这样的处理每次都要定义 处理方法, 负责打开和关闭流 ,
如果处理的是规则的接口,返回的数据都是相对固定的字段,可以考虑
利用自己定义的帮助类和接口实现的内部类,能够极大简化, 可以直接得到类。
首先是远程接口类, 调用得到JSON字串。。
public class RemoteRepositoryImpl implements RemoteRepository { public String executePost(String url, Entity...requestBody) throws RemoteException { PostMethod method = getPostMethod(url); if (requestBody!=null && requestBody.length>0) { method.setRequestBody(requestBody); } return execute(method); } protected PostMethod getPostMethod(String url) { PostMethod method = new PostMethod(url); method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000); //设置 post 方法请求超时为 15 秒 method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); return method; } public String execute(HttpMethodBase httpMethod) throws RemoteException { HttpClient client = new HttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);//设置 http 连接超时为 10 秒 String url = ""; long logT1 = System.currentTimeMillis(); try { url = "" + httpMethod.getURI(); int sc = client.executeMethod(httpMethod); if (sc != HttpStatus.SC_OK && sc!=HttpStatus.SC_CREATED && sc!=HttpStatus.SC_ACCEPTED) { throw new RemoteException("remote service ERROR! methodstatus=[" + sc + "]" + url, "HttpStatus"); } return httpMethod.getResponseBodyAsString(); } catch (URIException e) { throw new RemoteException("URIException remote service ERROR!" + url, "URIException", e); } catch (HttpException e) { throw new RemoteException("HttpException remote service ERROR!" + url, "HttpException", e); } catch (IOException e) { throw new RemoteException("IOException remote service ERROR!" + url, "IOException", e); } catch (RuntimeException e) { throw new RemoteException("RuntimeException","RuntimeException" , e); } finally { httpMethod.releaseConnection(); long logT2 = System.currentTimeMillis(); if (logger.isInfoEnabled()) { logger.info("Remote Time " + (logT2 - logT1) + " millisecounds:" + url); } } } }
在得到结果之后, 把返回字符串放到 JSON 包装类对象中去。
public class JSONWrapper { protected JSONObject root; private String json; /** * 构造 * @param json */ public JSONWrapper(String json) { json = json.replaceAll("\\n", ""); this.json = json; String validJson = (json); if (validJson!=null) { root = (JSONObject) JSONSerializer.toJSON((json)); }else { root = new JSONObject(true); } } private JSONWrapper(JSONObject json) { this.json = ""; root = json; } /** * 静态工厂 * @param json * @return */ public static JSONWrapper valueOf(String json) { return new JSONWrapper(json); } private static <E> List<E> getJavaList(Object bean, String path, ToJava<E> tojava){ Object p = getProperty(bean, path); if (p==null) { return Collections.emptyList(); } if (!(p instanceof JSON)) {// TODO trycache return Collections.emptyList(); // throw new RuntimeException("path 路径错误,请检查:[" + p + "]不是一个JSON对象"); } JSON jo = (JSON) p; List<E> res = new ArrayList<E>(jo.size()); Collection arr = (jo instanceof JSONObject) ? ((JSONObject) jo).values() : (JSONArray) jo; JSONWrapper subWrapper = new JSONWrapper((JSONObject)null); for (Object obj : arr) { if (!(obj instanceof JSONObject)) { logger.error("path 路径错误,请检查:[" + obj + "]不是一个JsonObject对象"); continue; //throw new RemoteException("path 路径错误,请检查:[" + obj + "]不是一个JsonObject对象", "json"); } if (((JSONObject) obj).isNullObject()) { continue; } try { subWrapper.root = (JSONObject) obj; E o = tojava.toJava(subWrapper); if (o!=null) { res.add(o); } } catch (RuntimeException e) { logger.error("取tojava异常"); //throw new RemoteException("取tojava异常", "json", e); } } return res; } //根据路径得到 JSON 对象 private static Object getProperty(Object jo, String path) { if (StringUtils.hasText(path)) { for (String prop : path.split("\\.")) { if (jo==null) { return null; } if (jo instanceof JSONObject) { jo = getJSONObject((JSONObject) jo, prop); } } } return jo; } protected static Object getJSONObject(JSONObject jo, String propName) { return jo!=null && !jo.isNullObject()? jo.get(propName) : null; } }
通用的接口类 :
public interface ToJava<E>{ E toJava(JSONWrapper wrapper); }
这样,就可以使用内部类来得到JSON中的数据了
public class BusinessCircleServiceImpl implements BusinessCircleService { protected ToAssociationVO toAssociationVO = new ToAssociationVO(); //内部实现类 protected static class ToAssociationVO implements ToJava<AssociationVO> { public AssociationVO toJava(JSONWrapper wrapper) { AssociationVO vo = new AssociationVO(); vo.setId(wrapper.getLong("id", null)); vo.setTimeCreated(DateTimeUtils.formatPageDate(DateTimeUtils.parseFullDateTime(DateUtil .getDateTimeByMillisecond(wrapper.getString("timeCreated", null))))); return vo; } } public List<AssociationVO> getRecommandList(int type, PaginationDto paginationDto) { .................................. //调用代码: try { String strJson = remoteRepository.executeGet(CommonConstant.getBatchShowAssociationURL() + ids); return JSONWrapper.valueOf(strJson).getJavaList("result", toAssociationVO); } catch (RemoteException e) { log.error("远程服务出错:" + CommonConstant.getBatchShowAssociationURL() + ids, e); return Collections.EMPTY_LIST; } } }
发表评论
-
JDK8开发STREAM流Collectors.toList()出现NULL异常
2025-01-15 17:31 0JAVA使用流式开发,总是在最终排序汇总的行报错 ... -
NGINX配置简单的MOCK接口
2024-10-15 17:25 0公司中需要对应用进行压测,需要不影响接口返回速度的情况下,返 ... -
RabbitMQ消息关闭自动启动
2024-09-23 11:34 0应用配置的RabbitMQ一启动就注册监听器,这样 ... -
应用内存长期80%不下降
2024-06-21 18:13 0观察到应用JVM长期85%以上,堆内存小幅度波动,没有变化, ... -
内存80告警
2024-05-24 11:08 0网关内存到了85%, 查看近几天内存一直小幅波动,没有下降 ... -
Eclipse设置护眼色
2022-06-17 09:04 0编辑区背景色 1.背景颜色 Window->Pre ... -
java证书安装和更新/删除
2022-01-19 15:02 1139拿到证书,如 ****2019.cer。在WIN下面,双击 ... -
CLASS文件目录不执行更新,改了代码不生效
2021-12-02 16:56 0class目录下不编译, 更新了代码运行还是老的内容执行. ... -
Struts2导出多Excel压缩包
2021-09-28 16:34 0Struts2配置 <result name= ... -
8080端口不能访问
2021-07-21 23:11 0电脑装好之后,本机能访问,外机通过IP不能访问,关闭防火墙可 ... -
JVM设置中文编码
2021-07-05 11:46 0用CXF2.0做了一个接口转发服务,调用后发现中文出现乱码, ... -
自动发布没有通知更新缓存
2021-01-15 10:17 0问题 在成功测试完成平台的一个版本, 测试计划出测试报告 ... -
Eclipse 查看本地历史记录
2020-09-03 16:39 0Eclipse 在更新后,发现本地修改的代码不见了,可以使 ... -
SPRINGBOOT定时器中断不跑了测试
2020-08-05 21:43 0一次发布之后, 定时器不跑了, 追查了TOMCAT 日志, ... -
LOG4J多项目同TOMCAT后面项目不生成日志文件
2020-04-28 10:35 0在项目的TOMCAT里新增加一个监控的项目, 发现监控项目 ... -
DUBBO配置多环境
2019-11-07 16:49 0需要在Springboot2项目中配置DUBBO, Dub ... -
SOAPUI中文乱码
2019-10-23 11:05 0用SOAPUI调用报错UTF-8,参数中有中文。看到返回错误 ... -
JAVA中SET集合判断是否包含的坑
2019-10-22 14:18 0SET集合中存放航班信息对象FlightBoardQuery ... -
定时器任务缓慢
2019-10-09 13:51 0值机系统在国庆前定时器不再执行了。查日志Spring定时任 ... -
NGINX配置
2019-05-28 16:17 0在测试环境LINUX安装后,调试了很久跳转TOMCAT不通 ...
相关推荐
在实际应用中,这样的工具可以帮助开发者快速地在JSON和C#类之间切换,简化数据操作,提高开发效率。同时,它也展示了C#如何利用强大的库(如Json.NET)来处理JSON数据,以及如何处理语言间的互操作性问题。 由于本...
然而,"QtSharpJson.zip"提供的内容是对Qt原生JSON支持的进一步封装,旨在简化JSON操作并提高效率。 标题"封装了qt的json操作类QtSharpJson.zip"表明这个压缩包包含了一个名为QtSharpJson的自定义库,这个库是对Qt ...
`swift-macapp根据json字符串创建模型类自动判断类型`是一个针对这个问题的解决方案,它帮助开发者更高效地实现JSON到Swift模型类的转换。 首先,Swift提供了一个内置的JSONSerialization类,用于处理JSON数据。...
标签中提到的“源码”可能指的是这些JSON库的源代码开放,开发者可以查看和研究其内部实现,这对于学习和优化JSON处理效率非常有帮助。“工具”则暗示了这些库是开发中的实用工具,能够简化JSON操作。 综上所述,...
通过源代码,我们可以了解这些类是如何实现的,以及如何利用它们来简化JSON数据的解析和操作。 7. **注解和属性** JSON.NET支持使用特性(如`[JsonProperty]`、`[JsonIgnore]`)来自定义序列化过程。源代码展示了...
4. **commons-beanutils-1.7.0.jar**:Apache Commons BeanUtils库,提供了一些方便的工具类,帮助在JavaBean对象和JSON对象之间进行映射,简化了数据转换的过程。 这些jar包组合在一起,可以构建一个完整的JSON...
`JsonUtils`应该有适当的异常处理机制,当出现错误时,能够抛出易于理解和处理的异常,而不是简单的运行时异常。 7. **性能优化**: 高效是工具类的一个重要考量因素。`JsonUtils`通常会利用缓存技术,对于频繁...
6. **与其他技术集成**:JSON Lib可以与Spring框架、Struts等其他Java技术无缝集成,简化JSON数据的处理。 总之,JSON Lib是Java开发中处理JSON数据的一个强大工具,尤其是在JDK 1.5环境下,它提供了稳定和高效的...
Json.NET还提供了XML和JSON之间的转换功能,`JsonConvert.SerializeXmlNode()`和`JsonConvert.DeserializeXmlNode()`方法分别用于XML到JSON和JSON到XML的转换。 8. **性能优势** 相比其他.NET框架下的JSON库,...
总之,`json2.4 jar包`是一个功能丰富的Java JSON处理库,它简化了JSON在Java应用程序中的操作,无论是用于网络通信、数据存储还是其他需要JSON转换的场景,都能提供强大的支持。通过源代码文件,开发者可以更好地...
开发者可以通过继承JsonConverter并实现WriteJson和ReadJson方法,自定义特定类型的序列化和反序列化逻辑。这使得Newtonsoft.Json可以处理自定义类型或复杂的数据结构。 7. **动态Json**:Json.Linq支持 ...
例如,创建一个Action类,定义一个方法,该方法使用@Result注解指定返回类型为json,然后在方法内部将Java对象转换成Json字符串,如使用Fastjson或Gson库进行转换。 在前端,使用JQuery的Ajax方法发起请求到Struct2...
JSON4S是一个在Scala编程语言中处理JSON的开源库,其设计目的是为了简化JSON的序列化和反序列化过程。这个库提供了多种JSON实现,包括一个与Scalaz库集成的版本,即“json4s-scalaz”。Scalaz是一个扩展了Scala标准...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端数据传输。...理解JSON的基本结构和常用处理方法,以及如何利用工具类进行操作,对于任何涉及JSON的开发工作都是必不可少的技能。
总的来说,JSON解析工具是开发过程中的得力助手,它简化了JSON数据的查看和处理,提升了开发效率,对于理解和调试JSON数据具有重要作用。通过深入理解这些工具的工作原理和功能,开发者可以更好地利用它们来优化自己...
这个工具的出现极大地简化了对GRIB2数据的分析和可视化,尤其是对于那些熟悉JavaScript和JSON的开发者来说。 项目的核心在于一个名为`grib2json.js`的脚本,该脚本实现了GRIB2到JSON的转换逻辑。用户可以通过在终端...
5. **处理数据**:在组件内部,你需要处理JSON数据的增删改查,并同步到UI上。 6. **样式定制**:根据需求,可以使用CSS预处理器(如Sass或Less)对生成的UI进行样式定制。 7. **交互逻辑**:添加事件监听器以响应...
通过“json2pb master”,开发者可以有效地在JSON和protobuf之间架起桥梁,充分利用两者的优势,提升系统的性能和效率。无论是快速原型开发还是大型项目部署,这样的工具都能极大地简化数据转换的工作,提高开发效率...
最后,jackson-databind利用这些注解来实现自动的序列化和反序列化,使得处理JSON数据变得简单高效。 总结一下,Jackson 2.4.2版本的这三个JAR文件是Java开发者处理JSON数据的强大工具。它们结合了流式处理、注解...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web应用程序之间传递数据。它基于JavaScript的一个子集,格式简洁...通过合理利用这类工具,开发者可以在面对复杂JSON数据时更加游刃有余。