2019独角兽企业重金招聘Python工程师标准>>>

//单元科技-www.ccell.com.cn 技术部,开源
//XML数据有XPATH 如"root/rows[@id=1]/name"
//在JS中JSON数据可以对象方式访问
//java中怎么 用字符串表达式访问JSON数据? 找了很久没有找到,自己写一个,以减小代码量,让程序可读性变强
//用法:
//   JSONObject json = JSON.parseObject("{a:1,b:{}}");
//   JSONHelper.putByJPath(json, "b.abc", 123);
//   System.out.println(json);
//   System.out.println(JSONHelper.getByJPath(json, "b.abc", Integer.class));
//代码:
package com.ccell.json;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class JSONHelper {

public static  <T> Object getByJPath(JSONObject root, String jpath, Class<T> cls) {

if (root == null) {
      return null;
    }

if (jpath == null || "".equals(jpath)) {
     
      if (cls.equals(JSONObject.class)){
        return root;
      }else{
        return null;
      }
    }
   
    String[] names = jpath.split("\\.");
    String key = names[0];

JSONObject jobj = null;
    Object result = null;

if (key.matches("^.+(\\[\\d+\\])+$")) {

String[] tmps = key.replaceAll("\\]", "").split("\\[");

JSONArray jarray = root.getJSONArray(tmps[0]);

if (jarray != null) {
        for (int j = 1; j < tmps.length; j++) {

int index = Integer.parseInt(tmps[j]);
          if (j == tmps.length - 1) {
            if (names.length == 1) {
              result = jarray.getObject(index, cls);
            } else {
              jobj = jarray.getJSONObject(index);
              result = getByJPath(jobj, jpath.substring(key.length() + 1), cls);
            }
          } else {
            jarray = jarray.getJSONArray(index);
          }
        }
      }

} else {

if (names.length == 1) {
        result = root.getObject(key, cls);
      } else {
        jobj = root.getJSONObject(key);
        result = getByJPath(jobj, jpath.substring(key.length() + 1), cls);
      }

}
   
    return result;
   
  }

public static void putByJPath(JSONObject root, String jpath, Object value) {

String key = jpath;
    String parentpath = "";
    int pos =  jpath.lastIndexOf(".");
    if (pos >= 0){
      key = jpath.substring(pos + 1);
      parentpath = jpath.substring(0,pos );     
    }

JSONObject jobj = (JSONObject) getByJPath(root,parentpath,JSONObject.class);
    jobj.put(key, value);
   
  }
 
}

转载于:https://my.oschina.net/u/162811/blog/76501

用字符串表达式访问JSON数据(java,fastjson)相关推荐

  1. 使用Go语言访问JSON数据(gojsonq)

    2019独角兽企业重金招聘Python工程师标准>>> 使用Go语言访问JSON数据(gojsonq) 转载于:https://my.oschina.net/coderminer/b ...

  2. java fastjson_java操作json数据之fastjson

    第五步骤:多层实体类转json处理. 第一种:实体类Person public static void main(String[] args) { Person p1 = new Person();  ...

  3. c语言json数据转换成字符串,Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)...

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  4. 如何解析json字符串及返回json数据到前端

    前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是json格式,然后按照请求参数读取前端提前整理好的json数据,并且将json数据返回到服务器端. 主要的工具:Gson  2.8.2 ...

  5. SpringBoot(3) 获取后台返回字符串对象及json数据

    下面讲解springboot-web工程 如何跳转到一个页面 和 获取一个后台返回的字符串,对象,以及json数据... 1.创建一个maven web工程   2.导入依赖 <!-- web支 ...

  6. c#加入json库引用_C#如何通过匿名类直接使用访问JSON数据详解

    实验目的 在C#和Rest/Restful以及其它的Web服务交互过程中,大量使用到JSON传递数据,如何快捷的转化C#对象到JSON和转化JSON到C#对象,成为开发过程中频繁使用的内容.传统的方式 ...

  7. java curl json_POST请求发送json数据java HttpUrlConnection

    我开发了一个java代码,使用URL和HttpUrlConnection将以下cURL转换为java代码.卷曲是: curl -i 'http://url.com' -X POST -H " ...

  8. Java读取数据库的数据并转换为json数据

    转换JSON格式需要一个org.json.jar库,网上一搜都有. [java]  view plain copy [java]  view plain copy [java]  view plain ...

  9. php怎么传json数据_php和js如何通过json互相传递数据相关问题探讨

    当我们在结合php和javascript实现某些功能时,经常会用到json.json是js的一种数据格式,可以直接被js解析.而php无法直接读取json数据,但是php提供了json_decode函 ...

最新文章

  1. How to read a book
  2. php定时删除文件夹下文件(清理缓存文件)
  3. ###《Effective STL》--Chapter2
  4. 主函数 main WinMain _tmain _tWinMain 的区别
  5. Vue(MVVM)、React(MVVM)、Angular(MVC)对比
  6. 一图读懂马云与阿里20年:互联网巨头是如何养成的?
  7. DateFormat PHP Class (php 处理日期)
  8. 是否进行“ git导出”(如“ svn导出”)?
  9. FileZilla:425 Can't open data connection for transfer of解决办法
  10. 使IE6支持png透明图片
  11. Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()
  12. 腾讯视频QLV格式转换为MP4格式
  13. QQ空间迁移_【小米摄像头跨局域网NAS存储】
  14. Js中${}字符串拼接
  15. 22-3-16Java冒泡排序
  16. TL民营医院奖金分配方案比较研究
  17. PMML 预测模型教程
  18. 集成产品开发,不让你的产品变现脚踩西瓜皮
  19. 一块硬盘装了黑苹果 一块硬盘装了win7_十分钟学会自己装电脑系统! 看完这篇,咱们单枪匹马,不求人,就是干!...
  20. 牛客练习赛51(C题 勾股定理)

热门文章

  1. 根据窗口名称查找关键字弹性域用到的表,列等信息
  2. [轉載]用PHP的ob_start();控制您的浏览器cache!
  3. java long double精度丢失_long long类型转double类型部分精度丢失问题
  4. Java高级 —— 泛型
  5. 如何快速清空Linux中的大文件?
  6. 后端技术:消息队列MQ/JMS/Kafka相关知识介绍
  7. C#中的几个实用的代码
  8. jio文件 久其_功能强大的Windows文件管理器工具
  9. 360浏览器打不开微信的连接服务器,上午还能打开,下午360浏览器打不开微信公 – 手机爱问...
  10. eclipse安卓工程的构建、配置连接模拟器、安卓工程结构介绍