精华内容
下载资源
问答
  • 现在有个问题,从第三方平台取来的json字符串,前三个json对象没有反斜杠,后面的却都有,导致转Java对象的时候出现JsonMappingException异常,这个怎么解决?? 类似:{"a":1,"b":2,"c":"{\"c1\":\"ccc\"}"}这种
  • 最近在开发中所写接口被三方调用,三方以json格式返回许多数据要存储,需要json格式的数据转化成实体对象,一般情况下简单的实体对象转化起来比较容易,但是我所遇到的是实体中嵌套多层list的情况,转化时比较麻烦...

    最近在开发中所写接口被三方调用,三方以json格式返回许多数据要存储,需要将json格式的数据转化成实体对象,一般情况下简单的实体对象转化起来比较容易,但是我所遇到的是实体中嵌套多层list的情况,转化时比较麻烦,查阅了许多资料,现将转化方法进行整理,如下:

        1.准备相应的jar包。我试验的时候采用的是jdk1.7环境,主要使用的类是:net.sf.json.JSONObject

    导入的相应jar包:

    2.先将json字符串转换为JSONObject,然后新建一个Map<String,Class>,其中key为实体中对应的list字段,value为相应class,最后使用net.sf.json.JSONObject的toBean方法将JSONObject转化为实体类,具体代码如下:

    // 先将前端或者三方传过来的字符串或者json数据转换为JSONObject
        JSONObject jsonObj = JSONObject.fromObject(str);
        //建立map存储实体类中的list,其中key要和实体类中的相应字段相同,若list所含的实体类中仍存在list,也可一并存储在          map中
        Map<String, Class> classMap = new HashMap<String, Class>();
          classMap.put("cities", City.class);
          classMap.put("towns", Town.class);
        //使用JSONObject的toBean方法将JSONObject对象转化为实体
        Country country = (Country) JSONObject.toBean(jsonObj, Country.class,classMap);
        System.out.println(country.getCities().get(0).getTowns());

    输入的json字符串:

    {
        "name":"中国",
        "age":5000,
        "capital":"北京",
        "cities":[
            {
                "name":"上海",
                "age":50,
                "towns":[
                    {
                        "name":"闵行区",
                        "age":50
                    },
                    {
                        "name":"浦东新区",
                        "age":50
                    }
                ]
            },
            {
                "name":"河南",
                "age":60,
                "towns":[
                    {
                        "name":"信阳",
                        "age":50
                    },
                    {
                        "name":"焦作",
                        "age":40
                    }
                ]
            }
        ]
      }

    实体类中不重写toString方法时的输出:



    实体类中重写toString方法时的输出:

    实验中所用实体类:

    package domain;
    
    import java.io.Serializable;
    import java.util.List;
    /**
     * 国家bean
     * @author wuts
     *
     */
    @SuppressWarnings("serial") 
    public class Country implements Serializable{
    
    	private String name;//国家名称
    	
    	private int age;//成立年限
    	
    	private String capital;//中心城市
    	
    	private List<City> cities;//国家所包含城市list
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public String getCapital() {
    		return capital;
    	}
    
    	public void setCapital(String capital) {
    		this.capital = capital;
    	}
    
    	public List<City> getCities() {
    		return cities;
    	}
    
    	public void setCities(List<City> cities) {
    		this.cities = cities;
    	}
    }
    

    package domain;
    
    import java.io.Serializable;
    import java.util.List;
    
    /**
     * 城市bean
     * @author wuts
     *
     */
    @SuppressWarnings("serial") 
    public class City implements Serializable{
    
    	private String name;//城市名称
    	
    	private int age;//建立年限
    	
    	private List<Town> towns;//城市所包含乡镇list
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public List<Town> getTowns() {
    		return towns;
    	}
    
    	public void setTowns(List<Town> towns) {
    		this.towns = towns;
    	}
    }
    

    package domain;
    
    import java.io.Serializable;
    
    /**
     * 乡镇bean
     * @author wuts
     *
     */
    @SuppressWarnings("serial") 
    public class Town implements Serializable{
    
    	private String name;//乡镇名称
    	
    	private int age;//乡镇建立年限
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    }
    



    展开全文
  • JSON是前端js语言中, 用来与其他语言交互的一种轻量级的数据交换格式, 交换时以字符串形式传递, 各语言再进行解析即可使用; 相比于XML语言, JSON用来传输数据, 层次结构清晰简单, 目前已基本取代XML, 广泛被用来跨...

        JSON是前端js语言中, 用来与其他语言交互的一种轻量级的数据交换格式, 交换时以字符串形式传递, 各语言再进行解析即可使用; 相比于XML语言, JSON用来传输数据, 层次结构清晰简单, 目前已基本取代XML, 广泛被用来跨语言传输数据; 

     

    一. JSON的数据定义格式:

    类型语法解释
    对象类型{name:value,name:value...}

    其中name是字符串类型,而value是任意类型,

    类似于java中的Map;

    数组/集合类型[value,value,value...]其中value是任意类型
    混合类型[{},{}... ...] 或 {name:[]... ...}合理包裹嵌套对象类型和数组类型

     

    二. 基于实用的原则, 以下分讲:

     

    1. 在js中解析Json字符串

        i. 方法: JSON.parse()

            用法:var jsonObj=JSON.parse(JASON字符串), 得到JSON

            注意: 这种方法可以安全地将获取到的JSON字符串转为JSON

        ii. 方法:eval()

            用法:var jsonObj = eval(“(“+json+”)”);

            注意:该方法会执行JSON字符串中可能存在的代码;

            另: 在字符串两侧拼接左右括号 ( 和 ) 是为了强制其将括号内内容作为解析对象解析成JSON, 使用时作为固定格式即可;

     

    2. 在java中将对象, 集合, 数组转换为JSON字符串 (基于Jackson)

        代码如下:(使用 import com.fasterxml.jackson.databind.ObjectMapper;)

    ObjectMapper om = new ObjectMapper();
    String s = om.writeValueAsString(object);//object可以为任意对象

        注意: Object转换为JSON字符串时,仅放入成员属性,舍弃方法;

                 其中: java对象和Map均将转为JSON中的对象格式, java数组和单列集合则转换为JSON的数组格式;

     

    3. 在java中解析JSON字符串 (基于Jackson)

        i. 简单的解析:

            举例:

    ObjectMapper om = new ObjectMapper();
    Object object = om. readValue(json字符串,Object.calss)

         ii. 数组/集合内嵌Java对象格式解析:

            举例:

    List<Category> list2 = om.readValue(s, new TypeReference<List<Category>>() {});

            注意: 这里需要用到: com.fasterxml.jackson.core.type.TypeReference;

                    传入该接口匿名类对象作为readeVlaue的参数2即可;

                    需要留意的是,需要定义出于与该结构中嵌套相同的Java类,否则直接用 "简单的解析:" 时,内层若碰到对象格式JSON, 则自动转换为LikedHashMap类型;

     

     

    展开全文
  • 在springmvc中我们可以使用@ResponseBody输入...Http请求响应报文其实都是字符串,当请求报文到java程序会被封装一个ServletInputStream流,开发人员再读取报文,响应报文则通过ServletOutputStream流,来输出响...

    在springmvc中我们可以使用@ResponseBody将输入解析成json对象并返回,这其中其实是通过HttpMessageConverter起作用的。
    注:springmvc底层默认使用jackson进行json对象的转换。

    HttpMessageConverter

    Http请求响应报文其实都是字符串,当请求报文到java程序会被封装为一个ServletInputStream流,开发人员再读取报文,响应报文则通过ServletOutputStream流,来输出响应报文。

    从流中只能读取到原始的字符串报文,同样输出流也是。那么在报文到达SpringMVC / SpringBoot和从SpringMVC / SpringBoot出去,都存在一个字符串到java对象的转化问题。这一过程,在SpringMVC / SpringBoot中,是通过HttpMessageConverter来解决的。

    在请求进入test方法前,会根据@RequestBody注解选择对应的HttpMessageConverter实现类来将请求参数解析到param变量中,因为这里的参数是String类型的,所以这里是使用了StringHttpMessageConverter类,它的canRead()方法返回true,然后read()方法会从请求中读出请求参数,绑定到test()方法的param变量中。

    同理当执行test方法后,由于返回值标识了@ResponseBody,SpringMVC / SpringBoot将使用StringHttpMessageConverter的write()方法,将结果作为String值写入响应报文,当然,此时canWrite()方法返回true。

    借用下图简单描述整个过程:
    在这里插入图片描述
    在Spring的处理过程中,一次请求报文和一次响应报文,分别被抽象为一个请求消息HttpInputMessage和一个响应消息HttpOutputMessage。

    处理请求时,由合适的消息转换器将请求报文绑定为方法中的形参对象,在这里同一个对象就有可能出现多种不同的消息形式,如json、xml。同样响应请求也是同样道理。
    在Spring中,针对不同的消息形式,有不同的HttpMessageConverter实现类来处理各种消息形式,至于各种消息解析实现的不同,则在不同的HttpMessageConverter实现类中。

    事实上,这里也可以替换为其他的json转化类,在springmvc中配置即可。(当配置mvc:annotation-driven 启用默认配置时springmvc默认是使用spring自己的转化类StringHttpMessageConverter将字符串转化为json对象,下面的配置可以省略,如果想使用其他的json转化类就需要配置)

    注;不同的json转化类解析得到的结果可能不同,如jackson解析如果值是null返回null,fastjson解析字符串类型的值如果是null就返回“”,数值类型的如果是null就返回0。
    在这里插入图片描述
    在这里插入图片描述
    例:配置使用阿里巴巴提供的fastjson(转化效率更高,速度更快):
    在这里插入图片描述
    在这里插入图片描述
    继承关系图:
    在这里插入图片描述

    展开全文
  • 最近碰到一个接口对接需要jsonarray集合转换List指定实体集合的情况,我使用的是阿里的fastjson工具包,操作很简单,具体的代码如下: //开始解析数据 JSONArray array = JSON.parseArray(result.get("data")....
    最近碰到一个接口对接需要将jsonarray集合转换为List指定实体集合的情况,我使用的是阿里的fastjson工具包,操作很简单,具体的代码如下:
    
    //开始解析数据
    JSONArray array = JSON.parseArray(result.get("data").toString());
    //遍历其中的数据
    List<CheckingInfo> checkinList = new ArrayList<>();
    checkinList =array.toJavaList(CheckingInfo.class);

    贴一下方法主体的源码,比较简单,有兴趣的可以去源码包看下。

    public <T> List<T> toJavaList(Class<T> clazz) {
        List<T> list = new ArrayList(this.size());
        ParserConfig config = ParserConfig.getGlobalInstance();
        Iterator var4 = this.iterator();
    
        while(var4.hasNext()) {
            Object item = var4.next();
            T classItem = TypeUtils.cast(item, clazz, config);
            list.add(classItem);
        }
    
        return list;
    }

     

    展开全文
  • Java解析Json字符串--复杂对象

    千次阅读 2015-12-22 18:31:37
    最外层由一个大括弧”{}”包裹,那么我们对应的可以建一个实体类来对应,内部有两个元素,元素name比较明显是字符串类型的,元素students的值是由一个中括弧”[]”包裹,那么它对应的应该是一个数组或者列表。...
  • 1.测试实体类 package test; @SuppressWarnings("serial") public class Policy implements java.io.Serializable{ private String LicenseNo; private String LicenseType; private String ComCode; private ...
  • 下面小编就为大家带来一篇Java中Json字符串直接转换为对象的方法(包括多层List集合)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Java解析Json字符串--单个实体

    千次阅读 2015-12-18 22:40:26
    最基础的Json字符串: { "age": 20, "gender": "male", "grades": "三班", "name": "苏三", "weight": 63.5 }
  • JAVA 中将字符串转换成类实例对象

    千次阅读 2010-12-02 13:28:00
    在很多时候我们需要一...以,我已经多个参数的考虑进去,对改字符串进行解析就可以转换成类的实例对象了。以下是我做的一个小的Demo,如果能够帮助大家,我当然觉得很开心, 希望对大家有帮助。 import ja
  • java解析json字符串方法总结

    千次阅读 2017-08-30 16:30:19
    java解析json字符串方法总结
  • java json字符串对象

    千次阅读 2019-06-26 14:00:17
    java JSON字符串对象 文中涉及到jar包: net.sf.json.JSONArray; net.sf.json.JSONObject; 话不多,直接撸代码 : 仅供参考 //数据对象格式 String jsonStr = "[{'prov': '陕西省','city': '西安市','area'...
  • **根据以下java实体类拼接字符串,使用谷歌的GJONS可以解析,** 1.Header header = (Header) gson.fromJson(json, Header.class); 2.Data entity = (Data) gson.fromJson(header.getData(), Data.class) 实体1 ...
  • java中json字符串java对象的转换

    千次阅读 2020-11-02 16:23:09
    1、Java与前台的交互2、解析JSON的第三方工具3、JSON数据和Java对象的相互转换Java对象转换JSON字符串JSON字符串转为Java对象 1、Java与前台的交互 作为后台,Java不仅需要接收前台传递过来的数据,还需要...
  • 一行代码搞定json字符串转成java对象 // JSONObject.parseObject(String text, Class<T> clazz); // text就是json字符串,泛型T就是你想要转换成的java对象 //例子 Person person = JSONObject.parseObject...
  • 解析Json字符串直接转换为对象(包括多层List集合 嵌套)所用jar包
  • Java中怎样Json字符串转换成实体

    千次阅读 2019-07-04 08:55:55
    Java中调用接口获取Json数据后,怎样转换成对应的实体类进行接受与存储。 实现 打开浏览器输入在线Json格式化,这里推荐使用: http://www.bejson.com/ 选择Json相关下的Json生成Java实体类。 Json数据...
  • java 字符串对象

    万次阅读 2018-05-08 14:01:50
    json字符串java对象互转在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很...
  • json字符串转换java自定义对象

    万次阅读 2018-07-12 10:20:38
    Json字符串Java对象的相互转换
  • Java实体类定义 在实际使用中一般是数据库对应的实体类,运用工具生成就好,如mybatis-generator import java.io.Serializable; public class User implements Serializable { private Integer id; private ...
  • java json字符串转成复杂对象

    千次阅读 2014-12-03 11:47:59
    简单说明: 为了方便数据在客户端及服务器端的传输...并且有很多现成的类库用于解析这些数据。。 本文是对net.sf.json使用后的总结。。目前官方开源的对json进行处理的项目很多,fastjson还有其它等等。。视自
  • java解析json字符串详解(两种方法)

    千次阅读 2019-08-23 16:37:50
    Android开发中请求服务器时一般服务器会返回一个json字符串,解析json字符串是平常开发中必然会用的东西。这里我平常使用的两种方法总结一下。 一、使用JSONObject来解析JSON数据 官方提供的,所以不需要导入第三方...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,451
精华内容 23,380
关键字:

java如何将字符串解析为实体对象

java 订阅