JSON与JAVA数据的相互转换
- 格式:doc
- 大小:34.00 KB
- 文档页数:2
java与json互相转换(解决⽇期问题)JSON 即 JavaScript Object Natation,它是⼀种轻量级的数据交换格式,⾮常适合于服务器与 JavaScript 的交互。
本⽂主要讲解下java和JSON之间的转换,特别是解决互相转换遇到⽇期问题的情况。
⼀、需要相关的jar包:json-lib-xxx.jarezmorph-xxx.jarcommons-httpclient-xxx.jarcommons-lang-xxx.jarcommons-logging-xxx.jarcommons-collections-xxx.jar上⾯的包可以从下⾯的连接下载:/index.html⼆、java-》JSON1.List-》JSONview plaincopy to clipboardprint?List<String> list = new ArrayList<String>();list.add("apple");list.add("orange");JSONArray jarr = JSONArray.fromObject(list);System.out.println("list->json:" + jarr.toString());打印结果:list->json:["apple","orange"]2.Map-》JSONview plaincopy to clipboardprint?Map<String, Object> map = new HashMap<String, Object>();map.put("name", "Michael");map.put("baby", new String[] { "Lucy", "Lily" });map.put("age", 30);JSONObject jo = JSONObject.fromObject(map);System.out.println("map->json:" + jo.toString());打印结果:map->json:{"age":30,"name":"Michael","baby":["Lucy","Lily"]}3.bean->JSONview plaincopy to clipboardprint?JsonBean bean = new JsonBean();bean.setName("NewBaby");bean.setAge(1);bean.setBorn(new Date());jo = JSONObject.fromObject(bean);System.out.println("bean->json:" + jo.toString());打印结果:bean->json:{"age":1,"born":{"date":10,"day":3,"hours":14,"minutes":14,"month":2,"seconds":1,"time":1268201641228,"timezoneOffset":-480,"year":110},"name":"NewBaby"}这时你会发现它把bean对象⾥的util.Date这个类型的所有属性⼀⼀转换出来。
jsonobject转java对象的原理在现代的Web开发中,JavaScript Object Notation(JSON)已成为应用程序之间交换数据的通用格式。
当接收到JSON格式数据时,我们经常需要将其转换为Java对象以对其进行处理。
这就需要了解一些关于JSON和Java对象之间转换的知识。
第一步:了解JSON的基本知识JSON是一个轻量级的数据交换格式,比XML更简单直观。
JSON数据结构为键值对,每个键名都是一个字符串类型,键值可以是数字、字符串、布尔值、数组或对象。
JSON数据的格式与JavaScript对象的格式十分相似,在JavaScript中可以轻易地转换为对象。
JSON格式示例:{"姓名": "张三","年龄": 28,"性别": "男","爱好": ["游泳", "打球"]}第二步:了解Java对象Java是一种面向对象的编程语言,它的对象包含数据和方法。
Java对象之间有继承、多态等特性。
在Java中,对象是通过类来实例化出来的。
Java对象的特点是具有强类型,即变量的类型在编程时需要确定。
Java对象示例:public class Student {private String name;private int age;private String sex;private List<String> hobbies;// getter 和 setter 方法省略}第三步:通过JSON库实现JSON转Java对象我们可以使用Java的JSON库来实现JSON转Java对象。
常用的JSON库包括Jackson、Gson、FastJson等。
这里以Jackson库为例来说明。
1. 导入Jackson库的依赖<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.4</version></dependency>2. 创建ObjectMapper对象来读取JSON数据,并使用readValue()方法将JSON转化为Java对象。
json 转 javabean 数字变科学计数法1. 问题背景在开发过程中,我们经常会遇到将json数据转换为javabean对象的情况。
然而,有时候json中的数字在转换成javabean对象后会变成科学计数法的形式,给我们的开发和使用带来了一些困扰。
2. 问题分析出现数字科学计数法的原因主要是由于数据的精度问题。
在JSON中,数字会以科学计数法的形式进行表示,而在转换成Java对象时,由于精度的问题,就会出现科学计数法的情况。
3. 解决方案为了解决这个问题,我们可以通过以下几种方法来处理:3.1 转换时手动处理在将json数据转换成javabean对象的过程中,可以手动处理数字,将其转换成字符串形式,然后再进行转换。
这样可以避免精度问题导致的科学计数法情况。
3.2 使用Gson库Gson是Google提供的用于处理json数据的Java库,它可以方便地将json数据转换成javabean对象。
在使用Gson库时,我们可以通过设置适当的精度,避免数据转换时出现科学计数法的情况。
3.3 自定义转换器如果以上两种方法无法满足需求,我们还可以编写自定义的转换器来处理数字转换的情况。
通过自定义转换器,我们可以更灵活地控制数据的转换过程,避免出现科学计数法的情况。
4. 实践经验在实际项目中,我们可以根据具体的情况来选择合适的解决方案。
对于简单的数据转换场景,可以采用手动处理或使用Gson库的方式来解决问题;对于复杂的数据转换需求,可以考虑编写自定义转换器来处理数字转换的情况。
5. 总结在处理json转javabean时,数字变成科学计数法是一个常见的问题。
我们可以通过手动处理、使用Gson库或编写自定义转换器等方式来解决这个问题,从而保证数据转换的准确性和精度。
在实际开发中,我们需要根据具体的情况选择合适的解决方案,以提高开发效率和代码质量。
6. 实际案例分析为了更好地理解和解决json转javabean数字变科学计数法的问题,我们可以通过一个实际的案例来展示解决方案的具体应用。
JSON的String字符串与Java的List列表对象的相互转换1.JSON的String字符串与Java的List列表对象的相互转换在前端:1.如果json是List对象转换的,可以直接遍历json,读取数据。
2.如果是需要把前端的List对象转换为json传到后台,param是ajax的参数,那么转换如下所⽰:var jsonStr = JSON.stringify(list);var param= {};param.jsonStr=jsonStr;在后台:import net.sf.json.JSONObject;import net.sf.json.JSONArray;1.把String转换为List(str转换为list)List<T> list = new ArrayList<T>();JSONArray jsonArray = JSONArray.fromObject(str);//把String转换为jsonlist = JSONArray.toList(jsonArray,t);//这⾥的t是Class<T>在这⾥,因为得到json字符串的时候⽤的是 JSONArray.fromObject(collenction),所有,在讲json字符串转换成json对象的时候,也只能⽤JSONArray.toCollection,并且,⼀定要带上后⾯的class参数。
2.把List转换为jsonJSONArray json = JSONArray.fromObject(object);String str = json.toString();//把json转换为String再如:Teacher类中,有三个属性。
private String teaId;private String teaName;private List<Student> stus;Teacher teacher_1 = new Teacher("编号1", "教师1", stus);JSONObject obj = JSONObject.fromObject(teacher_1);这⼀步,将Teacher 对象转换成json字符串的时候,没有任何的问题。
java中string与json互相转化在Java中socket数据传输时,数据类型往往⽐較难选择。
可能要考虑带宽、跨语⾔、版本号的兼容等问题。
⽐較常见的做法有两种:⼀是把对象包装成JSON字符串传输,⼆是採⽤java对象的序列化和反序列化。
随着Google⼯具protoBuf的开源。
protobuf也是个不错的选择。
对JSON,Object Serialize,ProtoBuf 做个对照。
1、string转json有三种⽅法第⼀种:string直接转jsonString json = "{\"2\":\"efg\",\"1\":\"abc\"}"; JSONObject json_test = JSONObject.fromObject(json); 将string的双引號转义就可以。
适⽤于字符串较短的另外⼀种:将string转为list后转为jsonList<String> list = new ArrayList<String>(); list.add("username"); list.add("age"); list.add("sex"); JSONArray array = new JSONArray(); array.add(list);能够使⽤list的add函数将须要的字符串拼接就可以,可是这个仅仅能使⽤jsonarry第三种:将string转为map后转为jsonMap<String, String> map = new HashMap<String, String>();map.put("1", "abc");map.put("2", "efg");JSONArray array_test = new JSONArray();array_test.add(map);JSONObject jsonObject = JSONObject.fromObject(map);这⾥使⽤map就能够将字符串转化为JSONArray或者JSONObject都能够。
FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换fastJson对于json格式字符串的解析主要⽤到了⼀下三个类:JSON:fastJson的解析器,⽤于JSON格式字符串与JSON对象及javaBean之间的转换。
JSONObject:fastJson提供的json对象。
JSONArray:fastJson提供json数组对象。
我们可以把JSONObject当成⼀个Map<String,Object>来看,只是JSONObject提供了更为丰富便捷的⽅法,⽅便我们对于对象属性的操作。
我们看⼀下源码。
同样我们可以把JSONArray当做⼀个List<Object>,可以把JSONArray看成JSONObject对象的⼀个集合。
此外,由于JSONObject和JSONArray继承了JSON,所以说也可以直接使⽤两者对JSON格式字符串与JSON对象及javaBean之间做转换,不过为了避免混淆我们还是使⽤JSON。
⾸先定义三个json格式的字符串,作为我们的数据源。
//json字符串-简单对象型private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";//json字符串-数组类型private static final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";//复杂格式json字符串private static final String COMPLEX_JSON_STR = "{\"teacherName\":\"crystall\",\"teacherAge\":27,\"course\":{\"courseName\":\"english\",\"code\":1270},\"students\":[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studen⽰例1:JSON格式字符串与JSON对象之间的转换。
JSON字符串与Java对象及数组的相互转换1. 把java 对象列表转换为json对象数组,并转为字符串复制代码代码如下:JSONArray array = JSONArray.fromObject(userlist);String jsonstr = array.toString();2.把java对象转换成json对象,并转化为字符串复制代码代码如下:JSONObject object = JSONObject.fromObject(invite);String str=object.toString());3.把JSON字符串转换为JAVA 对象数组复制代码代码如下:String personstr = getRequest().getParameter("persons");JSONArray json = JSONArray.fromObject(personstr);List<InvoidPerson> persons = (List<InvoidPerson>)JSONArray.toCollection(json, nvoidPerson.class);4.把JSON字符串转换为JAVA 对象复制代码代码如下:JSONObject jsonobject = JSONObject.fromObject(str);PassportLendsEntity passportlends = null;try {//获取⼀个json数组JSONArray array = jsonobject.getJSONArray("passports");//将json数组转换成 List<PassPortForLendsEntity>泛型List<PassPortForLendsEntity> list = new ArrayList<PassPortForLendsEntity>();for (int i = 0; i < array.size(); i++) {JSONObject object = (JSONObject)array.get(i);PassPortForLendsEntity passport = (PassPortForLendsEntity)JSONObject.toBean(object,PassPortForLendsEntity.class);if(passport != null){list.add(passport);}}//转换PassportLendsEntity 实体类passportlends = (PassportLendsEntity)JSONObject.toBean(jsonobject, PassportLendsEntity.class);str = "{\"lendperson\":\"李四\",\"lendcompany\":\"有限公司\",\"checkperson\":\"李四\",\"lenddate\":\"2010-07-19T00:00:00\",\"lendcounts\":4,\"passports\":[{\"passportid\":\"d\",\"name\":\"李豫川\",\"passporttype\":\"K\"},{\"passportid\":\"K9051\",\"name\":\"李平\",\"passporttype\":\"K\"},{\"passportid\":\"K90517\",\"name\":\"袁寒梅\",\"passporttype\":\"K\"},{\"passportid\":\"K905199\",\"name\":\"贺明\",\"passporttype\":\"K\"}]}";。
java对象与Json字符串之间的转化(fastjson)1. ⾸先引⼊jar包在pom.xml⽂件⾥加⼊下⾯依赖:<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.51</version></dependency>2. 创建⼀个Person类(⽅⾯下⾯使⽤)public class Person implements Comparable<Person> {private int age;private String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}public Person(int age, String name) {super();this.age = age; = name;}}3. 实现java对象与Json字符串之间的转化public class Test {public static void main(String[] args) {// 实现java对象与Json字符串之间的转化// 1. Person对象与json之间的转换//1.1 将Person对象转成jsonPerson p = new Person(10, "张三");Object obj = JSONArray.toJSON(p);String json = obj.toString();System.out.println("将Person对象转成json:" + json);//1.2 将json字符串转成Person对象Person person = JSONArray.parseObject(json, Person.class);System.out.println("person.getName():" + person.getName());// 2. 将List<Person>与json之间的转换//2.1 将List<Person>转成jsonList<Person> personList = new ArrayList<>();personList.add(new Person(10, "张三"));personList.add(new Person(10, "李四"));personList.add(new Person(10, "王五"));Object obj2 = JSONArray.toJSON(personList);String json2 = obj2.toString();System.out.println("将List<Person>转成json:" + json2);// 2.2. 将json字符串转成List<Person>对象List<Person> list = JSONArray.parseArray(json2, Person.class);System.out.println("list.size():" + list.size());// 3. 将Map对象与json之间的转换// 3.1 将Map转成jsonMap<String, Person> map = new HashMap<>();map.put("1", new Person(10, "张三"));map.put("2", new Person(10, "李四"));map.put("3", new Person(10, "王五"));Object obj3 = JSONArray.toJSON(map);String json3 = obj3.toString();System.out.println("将Map<String,Person>转成json:" + json3);// 3.2. 将json转成Map对象Map<String, Object> map2 = JSONArray.parseObject(json3);Person person2 = JSONArray.parseObject(map2.get("1").toString(), Person.class);System.out.println("person2.getName():" + person2.getName());}}运⾏以上代码,打印结果为:将Person对象转成json:{"name":"张三","age":10}person.getName():张三将List<Person>转成json:[{"name":"张三","age":10},{"name":"李四","age":10},{"name":"王五","age":10}]list.size():3将Map<String,Person>转成json:{"1":{"name":"张三","age":10},"2":{"name":"李四","age":10},"3":{"name":"王五","age":10}} person2.getName():张三。
java jackson 解析Java Jackson是一个流行的Java库,用于将Java对象与JSON数据进行相互转换。
它提供了一种简单而强大的方式来解析和生成JSON数据,使开发人员能够轻松地在Java应用程序中处理JSON。
在使用Java Jackson进行解析时,我们首先需要导入Jackson的相关库。
可以通过在项目的构建文件中添加Jackson依赖来实现,例如在Maven项目中,可以在pom.xml文件中添加以下代码:```xml<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.4</version></dependency>```引入Jackson库后,我们可以开始使用它来解析JSON数据。
首先,我们需要创建一个ObjectMapper对象,它是Jackson库的核心类之一。
ObjectMapper对象负责将JSON数据与Java对象之间进行转换。
要将JSON数据解析为Java对象,我们可以使用ObjectMapper 的readValue()方法。
这个方法接受两个参数:要解析的JSON数据和要转换成的Java对象的类。
例如,假设我们有以下的JSON数据:```json{"name":"John","age":30,"city":"New York"}```我们可以通过以下代码将其解析为一个Person对象:```javaString json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";ObjectMapper objectMapper = new ObjectMapper(); Person person = objectMapper.readValue(json, Person.class); ```在上面的代码中,我们首先将JSON数据作为字符串传递给readValue()方法,然后指定要转换成的Java对象的类。
Java中JSON字符串与java对象的互换实例详解在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON作为⼀个轻量级的数据格式⽐xml效率要⾼,XML需要很多的标签,这⽆疑占据了⽹络流量,JSON在这⽅⾯则做的很好,下⾯先看下JSON的格式,JSON可以有两种格式,⼀种是对象格式的,另⼀种是数组对象,{"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串[{"name":"JSON","address":"北京市西城区","age":25}]//数据对象格式从上⾯的两种格式可以看出对象格式和数组对象格式唯⼀的不同则是在对象格式的基础上加上了[],再来看具体的结构,可以看出都是以键值对的形式出现的,中间以英⽂状态下的逗号(,)分隔。
在前端和后端进⾏数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使⽤js中的JSON.parse()⽅法把JSON字符串解析为json对象,然后进⾏遍历,供前端使⽤。
下⾯进⼊正题,介绍在JAVA中JSON和java对象之间的互转。
json-lib提供了⼏个类可以完成此功能,例,JSONObject、JSONArray。
从类的名字上可以看出JSONObject转化的应该是对象格式的,⽽JSONArray转化的则应该是数组对象(即,带[]形式)的。
⼀、java普通对象和json字符串的互转java对象--》》字符串java普通对象指的是java中的⼀个java bean,即⼀个实体类,如,package .study.day3;public class Student {//姓名private String name;//年龄private String age;//住址private String address;public String getName() {return name;}public void setName(String name) { = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", address="+ address + "]";}}上⾯是我的⼀个普通的java实体类,看json-lib如何把它转化为字符串形式,public static void convertObject() {Student stu=new Student();stu.setName("JSON");stu.setAge("23");stu.setAddress("北京市西城区");//1、使⽤JSONObjectJSONObject json = JSONObject.fromObject(stu);//2、使⽤JSONArrayJSONArray array=JSONArray.fromObject(stu);String strJson=json.toString();String strArray=array.toString();System.out.println("strJson:"+strJson);System.out.println("strArray:"+strArray);}我定义了⼀个Student的实体类,然后分别使⽤了JSONObject和JSONArray两种⽅式转化为JSON字符串,下⾯看打印的结果,strJson:{"address":"北京市西城区","age":"23","name":"JSON"}strArray:[{"address":"北京市西城区","age":"23","name":"JSON"}]从结果中可以看出两种⽅法都可以把java对象转化为JSON字符串,只是转化后的结构不同。
fastjson将java对象与json字符串相互转换1、pom.xml⽂件添加依赖<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version></dependency>2、将对象转为json格式的字符串注意:JSONobject.toJSONString(object xx) 将对象转为json格式的字符串,使⽤fastjson序列化对象时,在序列化的时候,fastjson会先利⽤反射找到对象类的所有get⽅法,接下来去掉get前缀,然后⾸字母⼩写,作为json的每个key值,⽽get⽅法的返回值作为value。
添加到json中。
所以我们需要设置对象的set get⽅法错误代码:package com.testdemo;import com.alibaba.fastjson.JSONObject;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;public class FastJson1 {public static void main(String[] args) {Teacher t2 =new Teacher(20,"李四"); //将对象转为json字符串System.out.println(JSONObject.toJSONString(t2));}}@AllArgsConstructor@NoArgsConstructorclass Teacher{//年龄+姓名int age;String name;}===结果==={}正确代码:通过@Data注解⾃动实现set get⽅法public class FastJson1 {public static void main(String[] args) {Teacher t2 =new Teacher(20,"李四");System.out.println(JSONObject.toJSONString(t2));}}@Data@AllArgsConstructor@NoArgsConstructorclass Teacher{//年龄+姓名int age;String name;}==结果=== {"age":20,"name":"李四"}。
json-lib的JSONObject.toBean( )时碰到的日期属性转换的问题json------->JavaJSON数据是这样的:{"birthday":"1980/01/01","name":"testname"}javaBean是这样的:操作代码:json-lib的JSONObject.fromObject 转换JSON字符串碰到的日期属性转换的问题。
java------->Json把一个javabean转换成一个JSON的字符串的时候遇到一个问题,因为javabean中含有Date日期的类型,格式化字符串的时候遇到把Date类型也作为一个对象了,而我想要的结果是key=value ,取出来则是updatetime={day=24,year=2012...}样子的。
我们可以看出JSONObject net.sf.json.JSONObject.fromObject(Object object, JsonConfig jsonConfig)还接受一个JsonConfig对象,那么我们就应该从这里入手。
首先写一个value处理器:public class DateJsonValueProcessor implements JsonValueProcessor{/*** 字母日期或时间元素表示示例<br>* G Era 标志符Text AD <br>* y 年Year 1996; 96 <br>* M 年中的月份Month July; Jul; 07 <br>* w 年中的周数Number 27 <br>* W 月份中的周数Number 2 <br>* D 年中的天数Number 189 <br>* d 月份中的天数Number 10 <br>* F 月份中的星期Number 2 <br>* E 星期中的天数Text Tuesday; Tue<br>* a Am/pm 标记Text PM <br>* H 一天中的小时数(0-23)Number 0 <br>* k 一天中的小时数(1-24)Number 24<br>* K am/pm 中的小时数(0-11)Number 0 <br>* h am/pm 中的小时数(1-12)Number 12 <br>* m 小时中的分钟数Number 30 <br>* s 分钟中的秒数Number 55 <br>* S 毫秒数Number 978 <br>* z 时区General time zone Pacific Standard Time; PST; GMT-08:00 <br>* Z 时区RFC 822 time zone -0800 <br>*/public static final String Default_DATE_PATTERN = "yyyy-MM-dd";private DateFormat dateFormat;public DateJsonValueProcessor(String datePattern) {try {dateFormat = new SimpleDateFormat(datePattern);} catch (Exception e) {dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);}}@Overridepublic Object processArrayValue(Object value, JsonConfig jsonConfig) {return process(value);}@Overridepublic Object processObjectValue(String key, Object value,JsonConfig jsonConfig) { return process(value);}private Object process(Object value) {if (value == null) {return "";} else {return dateFormat.format((Timestamp) value);}}}操作代码:1.JsonConfig config = new JsonConfig();2.config.registerJsonValueProcessor(Timestamp.class,new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));3.JSONObject.fromObject(Object bean, JsonConfig jsonConfig)。
java list 转json 方法在Java中,将List转换为JSON有很多方法和工具可以使用。
JSON(JavaScript Object Notation)是一种常用的数据交换格式,它基于键值对的方式存储数据,非常适合在不同平台和语言之间进行数据交互。
以下是一些常见的方法和库,可以将List对象转换为JSON:方法1:使用原生Java使用原生Java转换List对象为JSON需要手动构建JSON字符串。
在Java中,可以使用StringBuilder或StringBuffer来构建字符串,在遍历List对象的过程中,逐个添加元素到字符串中。
Java提供了一些方法,例如JSONObject和JSONArray,用于创建和操作JSON对象和数组。
下面是一个示例代码,演示如何使用原生Java将List对象转换为JSON:```javaimport org.json.JSONArray;import org.json.JSONObject;import java.util.ArrayList;import java.util.List;public class ListToJsonExample {public static void main(String[] args) { //创建一个List对象List<String> list = new ArrayList<>(); list.add("张三");list.add("李四");list.add("王五");//创建一个JSONArray对象JSONArray jsonArray = new JSONArray(); //遍历List,将元素添加到JSONArray中for (String item : list) {jsonArray.put(item);}//创建一个JSONObject对象JSONObject jsonObject = new JSONObject(); //将JSONArray添加到JSONObject中jsonObject.put("items", jsonArray);//将JSONObject转换为JSON字符串String jsonString = jsonObject.toString(); System.out.println(jsonString);}}```输出结果为:{"items":["张三","李四","王五"]}```方法2:使用Gson库Gson是Google提供的一个Java库,用于将Java对象转换为JSON字符串以及将JSON字符串转换为Java对象。
jsonobject转javabean对象的方法一、背景介绍在使用Java语言进行开发过程中,经常会遇到将json格式的数据转换为Java对象的需求。
特别是在与前端进行数据交互的过程中,很多时候前端会将数据以json格式传递过来,而后端需要将这些json数据转换为Java对象进行进一步的处理。
在这个过程中,jsonobject转javabean对象的方法就显得尤为重要。
二、什么是jsonobject和javabean对象1. jsonobject:jsonobject是一种轻量级的数据交换格式,它是基于JavaScript语言的一个子集,可以用来描述数据的结构,常见于Web 开发中。
jsonobject由属性和值组成,属性和值之间使用冒号分隔,属性之间使用逗号分隔,整个json数据包括在大括号中。
例如:{"name":"张三","age":25}2. javabean对象:javabean是一种符合特定标准的Java类,它提供了一种统一的方式来封装Java对象的属性和方法。
javabean对象通常包含私有属性、公共的getter和setter方法以及无参的构造函数。
例如:```javapublic class User {private String name;private int age;public User() {}public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}三、jsonobject转javabean对象的方法在Java开发中,有多种方法可以实现jsonobject转javabean对象的转换,以下列举了一些常用的方法:1. 手动解析手动解析是一种比较基础也比较繁琐的方法,它需要开发者自己编写代码来逐个解析jsonobject中的属性,并将解析到的值赋给javabean对象中对应的属性。
jackson方法Jackson方法。
Jackson是一个用于Java对象和JSON数据相互转换的开源库。
它可以轻松地将Java对象转换为JSON格式的数据,也可以将JSON数据转换为Java对象。
在实际开发中,我们经常会遇到需要将Java对象转换为JSON格式数据,或者将JSON数据转换为Java对象的情况,而Jackson库的出现,为我们提供了一种简单、高效的解决方案。
一、Jackson库的引入。
在使用Jackson库之前,我们首先需要引入相应的依赖。
在Maven项目中,我们可以在pom.xml文件中添加如下依赖:```xml。
<dependency>。
<groupId>com.fasterxml.jackson.core</groupId>。
<artifactId>jackson-databind</artifactId>。
<version>2.12.3</version>。
</dependency>。
```。
这样就可以通过Maven来管理Jackson库的引入和版本控制了。
二、将Java对象转换为JSON数据。
在实际开发中,我们经常会需要将Java对象转换为JSON格式的数据,以便进行网络传输或持久化存储。
使用Jackson库可以轻松地实现这一转换过程。
下面是一个简单的示例:```java。
import com.fasterxml.jackson.databind.ObjectMapper;public class JacksonDemo {。
public static void main(String[] args) {。
ObjectMapper objectMapper = new ObjectMapper();User user = new User("张三", 25);try {。
JSON(JavaScript Object Notation):是一种轻量级的数据交换格式一、JSON建构有两种结构:对象和数组1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为对象.key 获取属性值,这个属性值的类型可以是数字、字符串、数组、对象几种。
2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。
二、具体形式1、对象(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。
(2)每个“名称”后跟一个“:”(冒号)(3)“…名称/值‟ 对”之间使用“,”(逗号)分隔例子:表示人的一个对象:{"姓名" : "大憨","年龄" : 24}2、数组是值(value)的有序集合。
(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。
(2)值之间使用“,”(逗号)分隔。
例子:一组学生{"学生" :[{"姓名" : "小明" , "年龄" : 23},{"姓名" : "大憨" , "年龄" : 24}]}说明:此Json对象包括了一个学生数组,而学生数组中的值又是两个Json对象。
说了这些基本了解json的数据结构了...补充:在线Json校验格式化工具:/go.php?u=/index.php 三、老样子上次demo这时我的工程结构图:上面引用到的外部库大家网上搜索下载~configdata.json:[javascript]view plaincopy1.[2.true,3.false,4.true5.]Address类:[java]view plaincopy1./**2. * @Title: 创建Address实体类的POJO3. * @Description: TODO(用一句话描述该文件做什么)4. * @author Potter5. * @date 2013-2-18 上午10:16:036. * @version V1.07. */8.9.public class Address {10.private String street;//街道11.private String city;//城市12.private int zip;//邮编13.private String tel;//第一个电话号码14.private String telTwo;//第二个电话号码15.16.public Address() {17. }18.19.public Address(String street, String city, int zip, String tel, String telTwo){20.this.street = street;21.this.city = city;22.this.zip = zip;23.this.tel = tel;24.this.telTwo = telTwo;25. }26.27.public String getStreet() {28.return street;29. }30.31.public void setStreet(String street) {32.this.street = street;33. }34.35.public String getCity() {36.return city;37. }38.39.public void setCity(String city) {40.this.city = city;41. }42.43.public int getZip() {44.return zip;45. }46.47.public void setZip(int zip) {48.this.zip = zip;49. }50.51.public String getTel() {52.return tel;53. }54.55.public void setTel(String tel) {56.this.tel = tel;57. }58.59.public String getTelTwo() {60.return telTwo;61. }62.63.public void setTelTwo(String telTwo) {64.this.telTwo = telTwo;65. }66.}JsonTest类:[java]view plaincopy1.import java.io.File;2.import java.io.FileNotFoundException;3.import java.io.FileReader;4.import java.io.IOException;5.import java.util.ArrayList;6.import java.util.LinkedHashMap;7.import java.util.List;8.import java.util.Map;9.10.import net.sf.ezmorph.bean.MorphDynaBean;11.import net.sf.json.JSONArray;12.import net.sf.json.JSONFunction;13.import net.sf.json.JSONObject;14.15.public class JsonTest {16.17.public static void main(String args[]) {18.//javaArray和json互相转换19. javaArrayAndJsonInterChange();20. System.out.println("-------------------------------------");21.//javaList和json互相转换22. javaListAndJsonInterChange();23. System.out.println("-------------------------------------");24.//javaMpa和Json互转25. javaMapAndJsonInterChange();26. System.out.println("-------------------------------------");27.//javaObject和jsonObject互转28. javaObjectAndJsonInterChange();29. }30.31./**32. * javaArray和json互相转换33. */34.public static void javaArrayAndJsonInterChange() {35.// java 转数组36.boolean[] boolArray = new boolean[] { true, false, true };37. JSONArray jsonArray = JSONArray.fromObject(boolArray);38. String s = jsonArray.toString();39. System.out.println(s);40.41.// 通过json获取数组中的数据42. String result = readJson("configdata");43.44. JSONArray jsonR = JSONArray.fromObject(result);45.int size = jsonR.size();46.for (int i = 0; i < size; i++) {47. System.out.println(jsonR.get(i));48. }49. }50.51./**52. * javaList和json互相转换53. */54.public static void javaListAndJsonInterChange() {55. List list = new ArrayList();56. list.add(new Integer(1));57. list.add(new Boolean(true));58. list.add(new Character('j'));59. list.add(new char[] { 'j', 's', 'o', 'n' });60. list.add(null);61. list.add("json");62. list.add(new String[] { "json", "-", "lib" });63.64.// list转JSONArray65. JSONArray jsArr = JSONArray.fromObject(list);66. System.out.println(jsArr.toString(4));67.68.// 从JSON串到JSONArray69. jsArr = JSONArray.fromObject(jsArr.toString());70.// --从JSONArray里读取71.// print: json72. System.out.println(((JSONArray) jsArr.get(6)).get(0));73. }74.75./**76. * javaMpa和Json互转77. */78.public static void javaMapAndJsonInterChange() {79. Map map = new LinkedHashMap();80. map.put("integer", new Integer(1));81. map.put("boolean", new Boolean(true));82. map.put("char", new Character('j'));83. map.put("charArr", new char[] { 'j', 's', 'o', 'n' });84.// 注:不能以null为键名,否则运行报net.sf.json.JSONException:85.// ng.NullPointerException:86.// JSON keys must not be null nor the 'null' string.87. map.put("nullAttr", null);88.89. map.put("str", "json");90. map.put("strArr", new String[] { "json", "-", "lib" });91. map.put("jsonFunction", new JSONFunction(new String[] { "i" },"alert(i)"));92. map.put("address", new Address("P.O BOX 54534", "Seattle, WA", 42452,"561-832-3180", "531-133-9098"));93.// map转JSONArray94. JSONObject jsObj = JSONObject.fromObject(map);95. System.out.println(jsObj.toString(4));96.97.// 从JSON串到JSONObject98. jsObj = JSONObject.fromObject(jsObj.toString());99.100.//第一种方式:从JSONObject里读取101.// print: json102. System.out.println(jsObj.get("str"));103.// print: address.city = Seattle, WA104. System.out.println("address.city = " + ((JSONObject) jsObj.get("add ress")).get("city"));105.106.107.//第二种方式:从动态Bean里读取数据,由于不能转换成具体的Bean,感觉没有多大用处108. MorphDynaBean mdBean = (MorphDynaBean) JSONObject.toBean(jsObj); 109.// print: json110. System.out.println(mdBean.get("str"));111.//print: address.city = Seattle, WA112. System.out.println("address.city = " + ((MorphDynaBean) mdBean.get( "address")).get("city"));113.114. }115.116./**117. * javaObject和jsonObject互转118. */119.public static void javaObjectAndJsonInterChange(){120. Address address=new Address("P.O BOX 54534", "Seattle, WA", 42452,"561-832-3180", "531-133-9098");121.//object转JSONObject122. JSONObject jsObj = JSONObject.fromObject(address);123. System.out.println(jsObj.toString(4));124.125.//JsonObject转java Object126.127. Address addressResult=(Address) JSONObject.toBean(jsObj, Address.cl ass);128. System.out.println("address.city = "+ addressResult.getCity()); 129. System.out.println("address.street="+addressResult.getStreet()); 130. System.out.println("address.tel = "+ addressResult.getTel()); 131. System.out.println("address.telTwo="+addressResult.getTelTwo()); 132. System.out.println("address.zip="+addressResult.getZip());133. }134.135./**136. * 读取json文件137. * @param fileName 文件名,不需要后缀138. * @return139. */140.public static String readJson(String fileName) {141. String result = null;142.try {143. File myFile = new File("./config/" + fileName + ".json"); 144. FileReader fr = new FileReader(myFile);145.char[] contents = new char[(int) myFile.length()];146. fr.read(contents, 0, (int) myFile.length());147. result = new String(contents);148. fr.close();149. } catch (FileNotFoundException e) {150. e.printStackTrace();151. } catch (IOException e) {152. e.printStackTrace();153. }154.return result;155. }156.}。
一、将任意的javaBean对象转换为json字符串:
Object obj=XXX;//任意一个javabean的对象都可以,但是这个javaBean必须是公开的,否则会报找不到get方法。
JSONObject jo=JSONObject.fromObject(obj);
System.out.println(jo.toString());
如果你的obj知道具体类型的话,还[可以使用JSONArray等对象来转换。
其方法也类似。
二、将json字符串转换为javaBean对象:
String str="json字符串对象";
JSONObject jo=JSONObject.fromObject(obj);
T t=(T)JSONObject.toBean(jo,T.class);
XXXX
实例:
简单的测试代码:
import java.util.List;
import net.sf.json.JSONObject;
public class Test {
public static void main(String[] args) throws Exception {
JSONObject jo = JSONObject.fromObject(new T());
String str = (jo.toString());
System.out.println(str);
JSONObject jo2 = JSONObject.fromObject(str);
T t = (T) JSONObject.toBean(jo2, T.class);
List<T2> lists2 = (t.getTest2());
for (Object t2 : lists2) {//这里的Object如果直接写成T2的话,会出错的,原因是JSON 转换后的lists2对象因为它不知道类型,就解析成JSON里的某种格式了,我们需要再调用相同的方法将其转成我们所知的JavaBean
System.out.println(((T3) JSONObject.toBean(JSONObject.fromObject(t2), T3.class)).getAaa());
}
List<String> l3 = t.getListString();
for (String s : l3) {
System.out.println(s);
}
}
}
运行结果:
{"test2":[{"aaa":"testAAA","bbb":"testBBB"},{"aaa":"testAAA","bbb":"testBBB"},{"aaa":"testAAA", "bbb":"testBBB"},
{"aaa":"testAAA","bbb":"testBBB"},{"aaa":"testAAA","bbb":"testBBB"}],"age":15,"listString":["中华人民共和国",
"中华人民共和国","中华人民共和国"],"str":"testStr"}
testAAA
2010-5-1 0:41:50 net.sf.json.JSONObject toBean
警告: Tried to assign property bbb:ng.String to bean of class T3
2010-5-1 0:41:50 net.sf.json.JSONObject toBean
警告: Tried to assign property bbb:ng.String to bean of class T3
testAAA
2010-5-1 0:41:50 net.sf.json.JSONObject toBean
警告: Tried to assign property bbb:ng.String to bean of class T3
testAAA
2010-5-1 0:41:50 net.sf.json.JSONObject toBean
警告: Tried to assign property bbb:ng.String to bean of class T3
testAAA
2010-5-1 0:41:50 net.sf.json.JSONObject toBean
警告: Tried to assign property bbb:ng.String to bean of class T3
testAAA
中华人民共和国
中华人民共和国
中华人民共和国。