精华内容
下载资源
问答
  • 总结一下Java对象集合与Json之间的互相转换:1、创建的User类:package com.ghj.packageofdomain;public class User {private int id;private String name;private String gender;public User() {}public User(int...

    总结一下Java对象和集合与Json之间的互相转换:

    1、创建的User类:

    package com.ghj.packageofdomain;

    public class User {

    private int id;

    private String name;

    private String gender;

    public User() {

    }

    public User(int id, String name, String gender) {

    this.id = id;

    this.name = name;

    this.gender = gender;

    }

    public int getId() {

    return id;

    }

    public void setId(int id) {

    this.id = id;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public String getGender() {

    return gender;

    }

    public void setGender(String gender) {

    this.gender = gender;

    }

    @Override

    public String toString() {

    return "id=" + id + ",name=" + name + ",gender=" + gender;

    }

    }        2、Java对象和集合与Json之间的互相转换:

    i、Java对象与Json之间的互相转换:

    package com.ghj.packageoftest;

    import net.sf.json.JSONObject;

    import com.ghj.packageofdomain.User;

    public class Test{

    public static void main(String[] args) {

    System.out.println(objectToJsonString());

    jsonStringToObject(objectToJsonString());

    }

    /**

    * 将Java对象转换为Json字符串

    *

    * @author 高焕杰

    */

    static String objectToJsonString(){

    JSONObject jsonObject = JSONObject.fromObject(new User(1, "张三", "男"));

    return jsonObject.toString();

    }

    /**

    * 将Json字符串转换为Java对象

    *

    * @author 高焕杰

    */

    static void jsonStringToObject(String jsonString){

    JSONObject jsonObject = JSONObject.fromObject(jsonString);

    User user = (User)JSONObject.toBean(jsonObject, User.class);

    System.out.println(user);

    }

    }        ii、Java集合与Json之间的互相转换:

    package com.ghj.packageoftest;

    import java.util.ArrayList;

    import java.util.List;

    import net.sf.json.JSONArray;

    import com.ghj.packageofdomain.User;

    public class Test{

    public static void main(String[] args) {

    System.out.println(collectionToJsonString());

    jsonStringToCollection(collectionToJsonString());

    }

    /**

    * 将Java集合转换为Json字符串

    *

    * @author 高焕杰

    */

    static String collectionToJsonString(){

    List userList = new ArrayList();

    userList.add(new User(1, "张三", "男"));

    userList.add(new User(2, "李四", "女"));

    userList.add(new User(3, "王五", "男"));

    JSONArray jsonArray = JSONArray.fromObject(userList);

    return jsonArray.toString();

    }

    /**

    * 将Json字符串转换为Java集合

    *

    * @author 高焕杰

    */

    static void jsonStringToCollection(String jsonString){

    JSONArray jsonArray = JSONArray.fromObject(jsonString);

    @SuppressWarnings("unchecked")

    List userList = (List)JSONArray.toCollection(jsonArray, User.class);

    for (User user : userList) {

    System.err.println(user);

    }

    }

    }        注意:

    1、上面User类不仅有有参构造函数还有无参构造函数,有人可能会问为什么要有无参的构造函数呢?呵呵呵,为了方面构造User实例,添加了有参数的构造函数,可是正因为有了这个构造函数才必须要添加无参构造函数,否则会出现下面异常:

    A113722833-110330.png_small.png

    如果不嫌构造User实例繁杂完全可以去掉这两个构造函数的——其实这种情况下无参构造函数还是存在的,呵呵呵,总之一句话要实现Json字符串转化为Java实例或集合则相关类中要有无参的构造函数。

    2、 Java对象和集合与Json之间的互相转换需要借助相应的jar包实现,这些jar包可以在Demo中获取到

    展开全文
  • 将java的对象或集合转成json形式字符串:json的转换插件是通过java的一些工具,直接将java对象集合转换成json字符串。常用的json转换工具有如下几种:1)jsonlib需要导入以下包:2)Gson:google需要导入一下包3)...

    将java的对象或集合转成json形式字符串:

    json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串。

    常用的json转换工具有如下几种:

    1)jsonlib

    需要导入以下包:

    bcaf7cd70200542e1d5c40e234f66967.png

    2)Gson:google

    需要导入一下包

    7df55690ad7851f98d067141d1ae47f7.png

    3)fastjson:阿里巴巴

    package com.itheima.web;

    import java.io.IOException;

    import java.sql.SQLException;

    import java.util.List;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import com.google.gson.Gson;

    import com.itheima.domain.Product;

    import com.itheima.service.ProductService;

    import net.sf.json.JSONArray;

    import sun.org.mozilla.javascript.internal.json.JsonParser;

    public class SearchWordServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    //获得关键字

    String word = request.getParameter("word");

    //查询该关键字的所有商品

    ProductService service = new ProductService();

    List productList = null;

    try {

    productList = service.findProductByWord(word);

    } catch (SQLException e) {

    e.printStackTrace();

    }

    //["xiaomi","huawei",""...]

    //使用json的转换工具将对象或集合转成json格式的字符串 jsonlib工具

    /*JSONArray fromObject = JSONArray.fromObject(productList);

    String string = fromObject.toString();

    System.out.println(string);*/

    //Gson工具

    Gson gson = new Gson();

    String json = gson.toJson(productList);

    System.out.println(json);

    response.setContentType("text/html;charset=UTF-8");

    response.getWriter().write(json);

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    doGet(request, response);

    }

    }

    展开全文
  • Java对象属性的id可以忽略public class EXLSReader {//对象属性名集合static List columnNameList = new ArrayList<>();//对象属性类型集合static List columnTypeNameList = new ArrayLis...

    代码

    Java对象的属性顺序还有数量必须和excel的列的顺序一一对应,否则数据不对应;

    Java对象属性的id可以忽略

    public class EXLSReader {

    //对象属性名集合

    static List columnNameList = new ArrayList<>();

    //对象属性类型集合

    static List columnTypeNameList = new ArrayList<>();

    /*

    * @author March

    * @Description readExcelData:解析excel表格,并且封装进对象;一行就是一个map,map的key是对象的属性名;属性的数量和位置必须和表的列一一对应

    * @warning:Java对象的属性顺序还有数量必须和excel的列的顺序一一对应,否则数据不对应;Java属性的id可以忽略

    * @Date 1:36 下午 2020/5/19

    * @param url:excel文件地址

    * @param readSheetName :表名

    * @param ignoreRow:需要忽略的行数,如标题这种

    * @param titleRow:列名,作为对象的key

    * @return

    **/

    public static List> readExcelData(String url, String readSheetName, Integer ignoreRow, Class clz) throws Exception {

    Optional.ofNullable(url).orElseThrow(() -> new RuntimeException("url文件路径不能为空"));

    Optional.ofNullable(readSheetName).orElseThrow(() -> new RuntimeException("readSheetName文件路径不能为空"));

    // 从XLSX/ xls文件创建的输入流

    try {

    FileInputStream fis = new FileInputStream(url);

    //封装单元格参数,map就是一行数据,key是

    List> hospitalList = new ArrayList();

    // 创建工作薄Workbook

    Workbook workBook = null;

    // 读取2007版,以 .xlsx 结尾

    if (url.toLowerCase().endsWith("xlsx")) {

    try {

    workBook = new XSSFWorkbook(fis);

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    // 读取2003版,以 .xls 结尾

    else if (url.toLowerCase().endsWith("xls")) {

    try {

    workBook = new HSSFWorkbook(fis);

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    //获取总共的表格数量

    int numberOfSheets = workBook.getNumberOfSheets();

    // 循环 numberOfSheets

    for (int sheetNum = 0; sheetNum < numberOfSheets; sheetNum++) {

    // 得到 工作薄 的第 N个表

    Sheet sheet = workBook.getSheetAt(sheetNum);

    String sheetName = sheet.getSheetName();

    if (readSheetName.equals(sheetName)) {

    //行

    Row row;

    // cell就是每个单元格的值

    String cell;

    //按顺序获取class的属性的类型的字符串

    columnTypeNameList=EXLSReader.parseBeanPropertyTypeName(clz);

    //按顺序获取class的属性名称

    columnNameList=EXLSReader.paresBeanPropertyName(clz);

    //数据封装

    for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) {

    //忽略的行数;

    if (Integer.compare(i, ignoreRow - 1) != 1) {

    continue;

    }

    // 循环行数

    row = sheet.getRow(i);

    //存储每行的参数

    Map map = new HashMap<>();

    for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {

    //遍历列名集合,

    for (int k = 0; k < columnNameList.size(); k++) {

    //当列名集合的下表和这行的下表相等时就放入map

    if (k == j) {

    cell=Optional.ofNullable(row.getCell(j).toString()).orElse("");

    switch (columnTypeNameList.get(k)){

    case "java.lang.Integer":

    map.put(columnNameList.get(k),Integer.valueOf(StringUtils.contains(cell,".")?cell.substring(0,cell.indexOf(".")):cell));

    break;

    case "java.lang.Long":

    map.put(columnNameList.get(k),Long.valueOf(cell));

    break;

    case "java.lang.Double":

    map.put(columnNameList.get(k),Double.valueOf(cell));

    break;

    case "java.lang.Float":

    map.put(columnNameList.get(k),Float.valueOf(cell));

    break;

    case "java.math.BigInteger":

    map.put(columnNameList.get(k), BigInteger.valueOf(Long.valueOf(cell)));

    break;

    case "java.math.BigDecimal":

    map.put(columnNameList.get(k),BigDecimal.valueOf(Double.valueOf(cell)));

    break;

    case "java.util.Date":

    map.put(columnNameList.get(k), DateUtils.parseDate(cell,"yyyy年MM月dd日","yyyy-MM-dd hh:mm:ss","yyyy-MM-dd HH:mm:ss"));

    break;

    //默认返回字符串

    //如果有需要的拓展类型,在上面的case中增加类型的全类路径名

    default:

    map.put(columnNameList.get(k),cell);

    break;

    }

    }

    }

    // System.out.print(cell+"\t");

    }

    hospitalList.add(map);

    // System.out.println();

    }

    }

    }

    return hospitalList;

    } catch (Exception e) {

    e.printStackTrace();

    }

    return null;

    }

    /*

    * @author March

    * @Description parseMapListToObjectList:把excel的文件读出,先转为map集合,再转为对象集合

    * @Warning:对象的属性名的顺序数量必须和excel表格一一对应

    * @Date 1:33 下午 2020/5/21

    * @param url:excel文件路径

    * @param readSheetName:表名

    * @param ignoreRow:忽略的行数(只需要数据,不需要列的字段)

    * @param clz:需要转换的对象的class

    * @return

    **/

    public static List parseExcelToMapListToObjectList(String url, String readSheetName, Integer ignoreRow, Class clz) throws IllegalAccessException, InstantiationException, IntrospectionException {

    List listInfo = new ArrayList<>();

    List> list = null;

    try {

    list = readExcelData(url, readSheetName, ignoreRow, clz);

    } catch (Exception e) {

    e.printStackTrace();

    }

    list.forEach(map -> {

    try {

    //map转为对象并且加入集合

    listInfo.add(EXLSReader.map2bean(map,clz));

    } catch (Exception e) {

    e.printStackTrace();

    }

    });

    return listInfo;

    }

    /*

    * @author March

    * @Description map2bean:把map的值转为对象

    * @Warning:对象的属性名和map的key必须一致

    * @Date 1:35 下午 2020/5/21

    * @param map

    * @param clz

    * @return

    **/

    public static T map2bean(Map map, Class clz) throws Exception {

    if (null == map) {

    throw new RuntimeException();

    }

    try {

    //创建一个需要转换为的类型的对象

    T obj = clz.newInstance();

    //从Map中获取和属性名称一样的值,把值设置给对象(setter方法)

    //得到属性的描述器

    BeanInfo b = Introspector.getBeanInfo(clz, Object.class);

    PropertyDescriptor[] pds = b.getPropertyDescriptors();

    for (PropertyDescriptor pd : pds) {

    //得到属性的setter方法

    Method setter = pd.getWriteMethod();

    //得到key名字和属性名字相同的value设置给属性

    setter.invoke(obj, map.get(pd.getName()));

    }

    return obj;

    } catch (Exception e) {

    throw new RuntimeException();

    }

    }

    /*

    * @author March

    * @Description paresBeanPropertyName:根据class依序获取对象属性的名字

    * @Date 11:13 上午 2020/5/21

    * @param clz

    * @return

    **/

    public static List paresBeanPropertyName(Class clz) {

    //获取class的属性字段;

    Field[] fields = clz.getDeclaredFields();

    if (fields.length > 0) {

    List beanPropertyNames=new ArrayList<>();

    try {

    //在使用java反射机制获取 JavaBean 的属性值时,如果该属性被声明为private 的,需要将setAccessible设置为true. 默认的值为false

    Field.setAccessible(fields, true);

    for (int i = 0; i < fields.length; i++) {

    //忽略ID字段

    if("id".equals(fields[i].getName())){

    continue;

    }

    //获取属性的名字

    beanPropertyNames.add(fields[i].getName());

    }

    return beanPropertyNames;

    }catch (Exception e){

    e.printStackTrace();

    }

    }

    return null;

    }

    /*

    * @author March

    * @Description parseBeanPropertyType:根据class依序获取对象属性的数据类型

    * @Date 10:32 上午 2020/5/21

    * @param clz

    * @return

    **/

    public static List parseBeanPropertyTypeName(Class clz) {

    Field[] fields = clz.getDeclaredFields();

    if (fields.length > 0) {

    List beanPropertyTypes=new ArrayList<>();

    try {

    //在使用java反射机制获取 JavaBean 的属性值时,如果该属性被声明为private 的,需要将setAccessible设置为true. 默认的值为false

    Field.setAccessible(fields, true);

    for (int i = 0; i < fields.length; i++) {

    //获取属性的类型的名字

    //忽略ID字段

    if("id".equals(fields[i].getName())){

    continue;

    }

    beanPropertyTypes.add(fields[i].getType().getName());

    }

    return beanPropertyTypes;

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    return null;

    }

    public static boolean isNumeric(String str) {

    try {

    new BigDecimal(str);

    } catch (Exception e) {

    return false;

    }

    return true;

    }

    }

    拓展:反射获取对象的属性的两种方法

    按照对象中属性从上至下的顺序

    //获取对象的所有属性

    Field[] fields = Class文件.getDeclaredFields();

    //获取属性名

    fields[i].getName()

    按照字典顺序获取对象的属性

    一般用于反射设置对象的属性值

    //获取对象的信息

    BeanInfo beanInfo = Introspector.getBeanInfo(Class文件, Object.class);

    PropertyDescriptor[] pds = b.getPropertyDescriptors();

    pd.getName();

    使用案例

    excel表格

    9c68133e4830

    2241590045941_.pic.jpg

    Java实体类

    @Data

    @AllArgsConstructor

    @NoArgsConstructor

    public class ShopEntity {

    private Integer id;

    private String shopName;

    private Double price;

    private Date shopTime;

    private String shopType;

    private Integer shopNumber;

    private BigDecimal discountPrice;

    }

    测试方法

    @Test

    public void test1(){

    try {

    List list = EXLSReader.parseExcelToMapListToObjectList("/Users/maqi/Documents/商品excel.xlsx", "商品表", 1, ShopEntity.class);

    list.forEach(System.out::println);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    展开全文
  • Java8对象集合转id集合

    千次阅读 2019-12-27 16:28:05
    Java8对象集合转id集合 List<Integer> ids = members.stream().map(TeamMemberInfo::getId). collect(Collectors.toList());

    Java8对象集合转id集合

    List<Integer> ids = members.stream().map(TeamMemberInfo::getId).
    collect(Collectors.toList());
    
    展开全文
  • Java 对象转 Map集合

    2017-12-20 15:10:09
    前两天由于学习需要,想将 Java转换成Map集合。个人第一时间是想到使用java的反射,于是上网搜索了一番,发现了两个类似的实现方式。 原文地址: 1. http://blog.csdn.net/bober/article/details/5807440 2. ...
  • 使用json-lib将Java对象转SONObject,Java集合转JSONArray
  • 要将基于集合对象转换为数组,可以使用toArray()或toArray(T[]a)方法,该方法由集合接口的实现提供,例如java.util.ArrayList.packageorg.nhooo.example.util;importjava.util.List;importjava.util.ArrayList;...
  • 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象// 购物项集合,K商品ID,V就是购物项Map map = new LinkedHashMap();public Collection getCartItems() {...
  • 第一、在pom.xml文件中增加jar包依赖:net.sf.json-libjson-lib0.9第二、在Java中用下面方法获取到json对象:JSONArray js = JSONArray.fromObject(listName);第三、使用toString()方法得到字符串:String result = ...
  • 1、先定义一个类对象package com.basics;import com.alibaba.fastjson.JSONObject;import java.util.List;import java.util.Map;/*** @author admin*/public class students {private Integer id;private String ...
  • 利用反射将Java对象转成Map集合 将java对象封装到map集合中有两种方案: 方案一: 先把对象的属性和属性值取出来,然后将对象的属性及属性值存储到Map集合中。这种方法比较简单粗暴,但是有一个弊端就是实体的属性...
  • json转Java对象 []形式的数据,使用parseArray,--->jsonJava集合 今天遇到了个坑, 我的需求是将json集合转变成java集合, 前台明明传递的是[]形式的json集合, 后台解密后无论如何转换都报错, 异常详情:...
  • 1、先定义一个类对象 package com.basics; import com.alibaba.fastjson.JSONObject; import java.util.List; import java.util.Map; /** * @author admin */ public class students { private ...
  • 在开发中,我们经常需要将集合对象(List,Set)转换为数组对象,或者将数组对象转换为集合对象Java提供了相互转换的工具,但是我们使用的时候需要注意,不能乱用滥用。1、数组对象转换为集合对象最暴力的方式是new...
  • 前台数据传递到后台json1、普通格式转换成对象String data=request.getParameter("data");//单数据的时候转换方式JSONObject json= JSONObject.fromObject(data);Tree tree = (Tree)JSONObject.toBean(json, Tree....
  • NULL 博文链接:https://zhglhy.iteye.com/blog/1766381
  • 1.将java对象转换为json字符串,利用json与java对象之间可以相互转换的方式进行存值和取值 try { String s = JacksonUtils.getInstance().writeValueAsString(user); System.out.println(“对象转化字符串:”+s); ...
  • Java中将List集合对象转换成json对象

    万次阅读 2019-03-20 00:35:47
    第二、在Java中用下面方法获取到json对象: JSONArray js = JSONArray.fromObject(listName); 第三、使用toString()方法得到字符串: String result = js.toString();  这个 result 就是json ,简单吧...
  • JSON解析器: 常见的解析器:Jsonlib,Gson,fastjson,jackson 1. JSON转为Java对象 ... Java对象、装有对象的集合、map(里面没对象)都可以转为转换JSON 使用步骤: 导入jackson的相关jar包
  • 使用json-lib将JSONObject转Java对象,JSONArrayJava集合
  • //用hibernate查询后的结果集直接已有的对象List list = session.createSQLQuery(sql.toString()).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();Class[] cla = {对象A.class,对象B.class};//...
  • 实现方法:1、Cat实体类:@Data@AllArgsConstructor@NoArgsConstructor@XStreamAlias(value="cat")publicclassCat{@XStreamAlias(value="name")privateStringname;@XStreamAlias(value="age")privateStringage;...
  • 对象转json串字符串转对象一个字符串中包含多个对象转换为对象集合问题描述 今天在做一个调用别人接口的时候返回来一个json串数组,解析返回一个ArrayList集合的问题,因为调用别人的接口有点多,所以就想做的通用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,763
精华内容 1,505
关键字:

java对象转集合

java 订阅