本文目录一览:
- 1、Java的json反序列化:Java数据类可以和json数据结构不一致吗?
- 2、求java合并json数据的代码
- 3、java开发,json是干什么的
- 4、java 如何解析JSON
- 5、java如何返回json格式?
- 6、请问Java中json是什么?
Java的json反序列化:Java数据类可以和json数据结构不一致吗?
由于时间关系我也没有写全,这里提供一个思路吧。代码如下:
Account.java:
@Data
public class Account {
private int id;
private String name;
// @PowerfulAnnotation注解是我臆想的
@PowerfulAnnotation("token.id")
private String tokenId;
@PowerfulAnnotation("token.key")
private String key;
}
PowerfulAnnotation.java:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PowerfulAnnotation {
String value() default "";
}
测试类Main.java:
public class Main {
public static void main(String[] args) throws Exception {
Account account = new Account();
String ori = "{\n" +
"\"id\": 11111,\n" +
"\"name\": \"小李\",\n" +
"\"token\": {\n" +
"\"id\": 22222222,\n" +
"\"key\": \"ddddddddd\"\n" +
"}\n" +
"}";
Gson gson = new Gson();
//字符串json转JsonObject
JsonObject jsonObject = gson.fromJson(ori, JsonObject.class);
//反射获取目标对象属性
for (Field field : account.getClass().getDeclaredFields()) {
String fieldName = field.getName();
Class fieldClass = field.getType();
System.out.print("当前field名:[" + fieldName + "],");
System.out.println("当前field类型:[" + fieldClass + "]");
Annotation annotation = field.getDeclaredAnnotation(PowerfulAnnotation.class);
//检查是否有PowerfulAnnotation注解
if (annotation != null) {
PowerfulAnnotation powerful = (PowerfulAnnotation) annotation;
String powerfulValue = powerful.value();
System.out.println("发现PowerfulAnnotation注解,值为:[" + powerfulValue + "]");
String[] tmp = powerfulValue.split("\\.");
//声明一个临时JsonObject,将用于获取下一层json对象
JsonObject tmpJson = jsonObject;
for (int i = 0; i tmp.length; i++) {
//目标值是在powerfulValue的最后一个字段,例如powerfulValue为token.id的话,目标的值就是id,所以先获取token这个jsonObject,并赋值给临时tmpJson
if (i != tmp.length - 1) {
tmpJson = jsonObject.get(tmp[i]).getAsJsonObject();
} else {
//到达powerfulValue的最后一个字段,检查其类型,并赋值给目标对象
Object value = checkFieldType(tmpJson, tmp[i], fieldClass);
//从目标对象中获取目标属性
Field targetField = account.getClass().getDeclaredField(field.getName());
targetField.setAccessible(true);//解除私有限制
System.out.println("将[" + powerfulValue + "]的值[" + value + "]赋给目标对象的[" + fieldName + "]");
//将值赋值给目标属性
targetField.set(account, value);
}
}
}
//属性上没有PowerfulAnnotation注解
else {
//检查当前属性的类型
Object value = checkFieldType(jsonObject, fieldName, fieldClass);
//从目标对象中获取目标属性
Field targetField = account.getClass().getDeclaredField(field.getName());
targetField.setAccessible(true);//解除私有限制
System.out.println("直接将值[" + value + "]赋给目标对象的[" + fieldName + "]");
//将值赋值给目标属性
targetField.set(account, value);
}
System.out.println("*********************************************\n");
}
System.out.println("目标对象最终值:" + account);
}
/**
* 检查当前属性的类型
* (这里由于时间关系,我没有写全,只检查了String、int、boolean类型,全类型应包括boolean、char、byte、short、int、long、float、double,你有时间自己补充一下)
*
* 如果发现当前属性是一个对象,那么应该将JsonObject转换成对应的对象再返回(由于时间关系,这里我也没有试过,总之思路是这样)
*/
private static Object checkFieldType(JsonObject field, String fieldName, Class fieldClass) {
if (fieldClass == String.class) {
return field.get(fieldName).getAsString();
}
if (fieldClass == int.class) {
return field.get(fieldName).getAsInt();
}
if (fieldClass == boolean.class) {
return field.get(fieldName).getAsBoolean();
}
return new Gson().fromJson(field.get(fieldName), fieldClass);
}
}
代码还没写完,主要集中在没有对JsonArray进行处理,当json串里包含数组时会报错,另外一些没写完的我在注释里写了点,你可以参照一下。整体思路还是利用java反射机制进行。
以上代码运行结果:
求java合并json数据的代码
我想了一下,但是得有一个前提,就是第一个json数组的size必须和第二个json数组的size相同,并且一一对应,否则将造成数组溢出。
如果是基于上面这个前提,那么实现的方法就简单了。
操作json对象,其实标准的方法是将实体类转换成json后再操作,我这里的话为了便捷直接使用谷歌的Gson来创建JsonObject了,其他的json依赖还有阿里巴巴的FastJson等等,看你平时用什么习惯。
引入Gson依赖:
dependency
groupIdcom.google.code.gson/groupId
artifactIdgson/artifactId
version2.8.0/version
/dependency
实现代码:
public class Main {
public static void main(String[] args) {
JsonArray jsonArray1 = new JsonArray();
JsonObject json11 = new JsonObject();
json11.addProperty("数据1", "0000");
json11.addProperty("数据2", "1111");
JsonObject json12 = new JsonObject();
json12.addProperty("数据1", "0000");
json12.addProperty("数据2", "1111");
JsonObject json13 = new JsonObject();
json13.addProperty("数据1", "0000");
json13.addProperty("数据2", "1111");
jsonArray1.add(json11);
jsonArray1.add(json12);
jsonArray1.add(json13);
System.out.println(jsonArray1);
JsonArray jsonArray2 = new JsonArray();
JsonObject json21 = new JsonObject();
json21.addProperty("数据3", "6666");
JsonObject json22 = new JsonObject();
json22.addProperty("数据3", "6666");
JsonObject json23 = new JsonObject();
json23.addProperty("数据3", "6666");
jsonArray2.add(json21);
jsonArray2.add(json22);
jsonArray2.add(json23);
System.out.println(jsonArray2);
//遍历json数组,按位取出对象
for (int i = 0; i jsonArray1.size(); i++) {
JsonObject json1 = jsonArray1.get(i).getAsJsonObject();
JsonObject json3 = jsonArray2.get(i).getAsJsonObject();
//遍历数据3内容,通过Entry获取数据3的key和value,并合并到数据1中
for (Map.EntryString, JsonElement item : json3.entrySet()) {
json1.addProperty(item.getKey(), item.getValue().getAsString());
}
}
System.out.println(jsonArray1);
}
}
整体思路为:遍历两个json数组,按位进行合并操作。合并时,遍历数据3的jsonObject,获取其key和value,并将其合并到数据1中即可。
运行结果:
java开发,json是干什么的
json其实就是封装了一种数据格式,它使用了自己定义的标准。主要用来在服务器和客户端的浏览器进行数据交换。因为我们常用的表单形式提交数据,有诸多的不便,json解决了一些问题。学习Java开发推荐千锋教育,千锋教育利用技术优势精心打造了AI教辅系统,依托技术领域热门的人工智能技术,科技辅学,有力护航学员成长。
java开发前景好,很多软件的开发都离不开Java,因此其程序员的数量最多。据官方数据统计,在全球编程语言工程师的数量上,Java语言以900万的程序员数量位居首位。Java在我们的生活中无处不在。只要我们能接触到互联网,我们就不能没有Java。目前,世界上有数十亿设备正在运行Java。从互联网电子商务到金融行业的服务器应用,从APP到企事业单位的OA系统,从大数据到桌面应用等,Java广泛应用于各个领域。
想要了解更多关于java开发的相关信息,推荐咨询千锋教育。千锋企合作部整合大量企业客户资源,紧抓当下企业需求,将技术和项目完美结合千锋课程体系,力求培养更多优质人才服务企业,不断提升学员竞争力,链接企业用人标准的培训课程及实战项目,让企业招聘用人的技术要求与千锋学员的技术充分对接。近年来不断引进阿里钉钉小程序技术、红帽认证、腾讯云、亚马逊等,通过与企业的深度融合实现千锋教研和就业服务的迭代升级,专业性值得信赖。
java 如何解析JSON
一、JSON(JavaScriptObjectNotation)一种简单的数据格式,比xml更轻巧。Json建构于两种结构:1、“名称/值”对的集合(Acollectionofname/valuepairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hashtable),有键列表(keyedlist),或者关联数组(associativearray)。如:{“name”:”jackson”,“age”:100}2、值的有序列表(Anorderedlistofvalues)。在大部分语言中,它被理解为数组(array)如:{“students”:[{“name”:”jackson”,“age”:100},{“name”:”michael”,”age”:51}]}二、java解析JSON步骤A、服务器端将数据转换成json字符串首先、服务器端项目要导入json的jar包和json所依赖的jar包至builtPath路径下(这些可以到JSON-lib官网下载:)然后将数据转为json字符串,核心函数是:publicstaticStringcreateJsonString(Stringkey,Objectvalue){JSONObjectjsonObject=newJSONObject();jsonObject.put(key,value);returnjsonObject.toString();}B、客户端将json字符串转换为相应的javaBean1、客户端获取json字符串(因为android项目中已经集成了json的jar包所以这里无需导入)publicclassHttpUtil{publicstaticStringgetJsonContent(StringurlStr){try{//获取HttpURLConnection连接对象URLurl=newURL(urlStr);HttpURLConnectionhttpConn=(HttpURLConnection)url.openConnection();//设置连接属性httpConn.setConnectTimeout(3000);httpConn.setDoInput(true);httpConn.setRequestMethod("GET");//获取相应码intrespCode=httpConn.getResponseCode();if(respCode==200){returnConvertStream2Json(httpConn.getInputStream());}}catch(MalformedURLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}return"";}privatestaticStringConvertStream2Json(InputStreaminputStream){StringjsonStr="";//ByteArrayOutputStream相当于内存输出流ByteArrayOutputStreamout=newByteArrayOutputStream();byte[]buffer=newbyte[1024];intlen=0;//将输入流转移到内存输出流中try{while((len=inputStream.read(buffer,0,buffer.length))!=-1){out.write(buffer,0,len);}//将内存流转换为字符串jsonStr=newString(out.toByteArray());}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnjsonStr;}}2、获取javaBeanpublicstaticPersongetPerson(StringjsonStr){Personperson=newPerson();try{//将json字符串转换为json对象JSONObjectjsonObj=newJSONObject(jsonStr);//得到指定jsonkey对象的value对象JSONObjectpersonObj=jsonObj.getJSONObject("person");//获取之对象的所有属性person.setId(personObj.getInt("id"));person.setName(personObj.getString("name"));person.setAddress(personObj.getString("address"));}catch(JSONExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnperson;}publicstaticListgetPersons(StringjsonStr){Listlist=newArrayList();JSONObjectjsonObj;try{//将json字符串转换为json对象jsonObj=newJSONObject(jsonStr);//得到指定jsonkey对象的value对象JSONArraypersonList=jsonObj.getJSONArray("persons");//遍历jsonArrayfor(inti=0;i
java如何返回json格式?
处理基本的java对象使用JSONObject类,用法大体如下:
public void testMap(){
MapString,Object map = new HashMapString,Object();
map.put("name", "qiu");
map.put("password", "123");
map.put("address", "china");
User user = new User();
user.setUserName("qiuqiu");
user.setPassword("123456");
user.getTels().add("1234444556677");
user.getTels().add("6893493458585");
map.put("user", user);
JSONObject json = new JSONObject(map);
System.out.println(json.toString());
}
官方的JSONArray并不支持javabean的直接转换,比如ListUser是不能转换的,必须要把它转换成ListMap这样的格式,才能转换。
请问Java中json是什么?
一 简介:
JSON(JavaScript对象符号)是一种轻量级的数据交换格式。这是很容易为人类所读取和写入。这是易于机器解析和生成。它是基于JavaScript编程语言的一个子集 , 标准ECMA-262第三版- 1999年12月。JSON是一个完全独立于语言的文本格式,但使用C家族的语言,包括C,C + +,C#,Java中的JavaScript,Perl的,Python中,和许多其他程序员所熟悉的约定。这些特性使JSON成为理想的数据交换语言。他和map很类似,都是以
键/值 对存放的。