- 浏览: 37830 次
- 性别:
- 来自: 重庆
最新评论
但是,如果双向关联都设置成fetch = FetchType.EAGER,就直接可以转换成JSON数据
package com.hikvision.iri.comm;
import java.util.HashSet;
import java.util.Set;
public class One implements FkCalss{
private static final long serialVersionUID = 6351525096093825835L;
private int age=0;
private Set<Many> manys=new HashSet<Many>(0);
public int getAge() {
return age;
}
public Set<Many> getManys() {
return manys;
}
public void setAge(int age) {
this.age = age;
}
public void setManys(Set<Many> manys) {
this.manys = manys;
}
}
//-----------------------------------------------------
package com.hikvision.iri.comm;
public class Many{
private static final long serialVersionUID = -6351525096093825836L;
private String name;
private One one=new One();
public String getName() {
return name;
}
public One getOne() {
return one;
}
public void setName(String name) {
this.name = name;
}
public void setOne(One one) {
this.one = one;
}
}
//------------------------------------------------------------
package com.hikvision.iri.comm;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.beanutils.PropertyUtils;
import com.googlecode.jsonplugin.JSONUtil;
public class A {
/**
* 将对象里面所有字段和值放在Map对象里面(包括外键和子类里面的键值对)
* 知识点:1,反射2,PropertyUtils类的getProperty()3,判断一个字段是否是静态类型的4,获取Set<X> X的字节码
* @author yangGuanLin 2011-10-11 下午08:19:47
* @param obj
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static Map<String, Object> getObjectEntry(Object obj) throws Exception {
Map<String, Object> map = null;
try {
map = new HashMap<String, Object>();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
Class fieldType = field.getType();//
// 判断是否是静态的属性
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
Object fieldVal = PropertyUtils.getProperty(obj, fieldName);
Object entryVal = null;
//FkCalss:让Yjwzcbkxxb实现FkCalss(什么都没有)接口
if (fieldVal instanceof FkCalss) {
// 外键实体 private Yjwzcbkxxb yjwzcbkxxb=new Yjwzcbkxxb();将Yjwzcbkxxb里面的字段弄成键值对
Field[] fs = fieldType.getDeclaredFields();// 获取字段
Map<String, Object> m = new HashMap<String, Object>();
for (Field f : fs) {
String fName = f.getName();
if (Modifier.isStatic(f.getModifiers())) {
continue;// 是静态的字段
}
Object fVal = PropertyUtils.getProperty(fieldVal, fName);
if (fVal instanceof Set) {
continue;// 如果字段是Set<>,只计算一层,不然就死循环了
}
m.put(fName, fVal);
}
entryVal = m;
} else
if (fieldVal instanceof Set) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> m = null;
// 子类的集合 private Set<Yjwzzbpcdjb> yjwzzbpcdjbs = new HashSet<Yjwzzbpcdjb>(0);
Class cla = (Class)((ParameterizedType)field.getGenericType()).getActualTypeArguments()[0];// 获取范型的类型这里是Yjwzzbpcdjb
for (Object o : (Set)fieldVal) {
Field[] fs = cla.getDeclaredFields();
m = new HashMap<String, Object>();
for (Field f : fs) {
String fName = f.getName();
if (Modifier.isStatic(f.getModifiers())) {
continue;
}
Object fVal = PropertyUtils.getProperty(o, fName);
if (fVal instanceof Set) {
continue;
}
m.put(fName, fVal);
}
list.add(m);
}
entryVal = list;
} else {
entryVal = fieldVal;
}
map.put(fieldName, entryVal);
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
public static void main(String[] args) throws Exception {
Map<String, Object> map= getObjectEntry(new Many());//{"one":{"age":0},"name":null}
//Map<String, Object> map=getObjectEntry(new One());//{"manys":[],"age":0}
String data=JSONUtil.serialize(map);
System.out.println(data);
}
}
package com.hikvision.iri.comm;
import java.util.HashSet;
import java.util.Set;
public class One implements FkCalss{
private static final long serialVersionUID = 6351525096093825835L;
private int age=0;
private Set<Many> manys=new HashSet<Many>(0);
public int getAge() {
return age;
}
public Set<Many> getManys() {
return manys;
}
public void setAge(int age) {
this.age = age;
}
public void setManys(Set<Many> manys) {
this.manys = manys;
}
}
//-----------------------------------------------------
package com.hikvision.iri.comm;
public class Many{
private static final long serialVersionUID = -6351525096093825836L;
private String name;
private One one=new One();
public String getName() {
return name;
}
public One getOne() {
return one;
}
public void setName(String name) {
this.name = name;
}
public void setOne(One one) {
this.one = one;
}
}
//------------------------------------------------------------
package com.hikvision.iri.comm;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.beanutils.PropertyUtils;
import com.googlecode.jsonplugin.JSONUtil;
public class A {
/**
* 将对象里面所有字段和值放在Map对象里面(包括外键和子类里面的键值对)
* 知识点:1,反射2,PropertyUtils类的getProperty()3,判断一个字段是否是静态类型的4,获取Set<X> X的字节码
* @author yangGuanLin 2011-10-11 下午08:19:47
* @param obj
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static Map<String, Object> getObjectEntry(Object obj) throws Exception {
Map<String, Object> map = null;
try {
map = new HashMap<String, Object>();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields) {
String fieldName = field.getName();
Class fieldType = field.getType();//
// 判断是否是静态的属性
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
Object fieldVal = PropertyUtils.getProperty(obj, fieldName);
Object entryVal = null;
//FkCalss:让Yjwzcbkxxb实现FkCalss(什么都没有)接口
if (fieldVal instanceof FkCalss) {
// 外键实体 private Yjwzcbkxxb yjwzcbkxxb=new Yjwzcbkxxb();将Yjwzcbkxxb里面的字段弄成键值对
Field[] fs = fieldType.getDeclaredFields();// 获取字段
Map<String, Object> m = new HashMap<String, Object>();
for (Field f : fs) {
String fName = f.getName();
if (Modifier.isStatic(f.getModifiers())) {
continue;// 是静态的字段
}
Object fVal = PropertyUtils.getProperty(fieldVal, fName);
if (fVal instanceof Set) {
continue;// 如果字段是Set<>,只计算一层,不然就死循环了
}
m.put(fName, fVal);
}
entryVal = m;
} else
if (fieldVal instanceof Set) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> m = null;
// 子类的集合 private Set<Yjwzzbpcdjb> yjwzzbpcdjbs = new HashSet<Yjwzzbpcdjb>(0);
Class cla = (Class)((ParameterizedType)field.getGenericType()).getActualTypeArguments()[0];// 获取范型的类型这里是Yjwzzbpcdjb
for (Object o : (Set)fieldVal) {
Field[] fs = cla.getDeclaredFields();
m = new HashMap<String, Object>();
for (Field f : fs) {
String fName = f.getName();
if (Modifier.isStatic(f.getModifiers())) {
continue;
}
Object fVal = PropertyUtils.getProperty(o, fName);
if (fVal instanceof Set) {
continue;
}
m.put(fName, fVal);
}
list.add(m);
}
entryVal = list;
} else {
entryVal = fieldVal;
}
map.put(fieldName, entryVal);
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
public static void main(String[] args) throws Exception {
Map<String, Object> map= getObjectEntry(new Many());//{"one":{"age":0},"name":null}
//Map<String, Object> map=getObjectEntry(new One());//{"manys":[],"age":0}
String data=JSONUtil.serialize(map);
System.out.println(data);
}
}
发表评论
-
得到本机的ip地址
2011-06-25 13:12 1149public static String getL ... -
怎么获得Map<String,Date>中 String或Date类型
2011-06-16 09:28 4771有一个要求就是获得范型中类型;想了很多招都不能实现。 但有框架 ... -
javascript检验xml是否正确
2011-01-04 20:07 1041<script type="text/java ... -
图片防止盗链 转转kaka100
2011-01-03 16:11 647转。。转。。 -
新发现----享元模式
2011-01-02 23:54 717java1.5新知识: public class A { ... -
得到汉字的拼音
2011-01-02 15:17 931package cn.java; public class ... -
设置图片等比例缩小
2011-01-02 15:04 791//----------------------------- ... -
网页中一些特殊字符的转换,如[image]
2011-01-02 14:51 982package com.email.util; public ... -
BigDecimal 的学习
2010-12-31 00:23 724package com.util; import java. ... -
人民币
2010-12-31 00:09 810package com.util; public class ... -
单例模式 转转转
2010-12-30 19:49 750单例模式的七种写法 文章分类:Java编程 转载请注明出处: ... -
文件压缩
2010-12-30 13:17 661package com.email.util; import ... -
Cookie的一些操作
2010-12-30 13:15 671package com.email.util; import ... -
servlet处理参数的一些操作
2010-12-30 13:09 602import javax.servlet.http.HttpS ... -
字符串与时间格式的相互操作
2010-12-30 13:06 829import java.text.ParseException ... -
文件的相关操作 转转转
2010-12-30 13:02 752package com.Utils; import java ... -
oracle 连接... 修改.....查询
2010-12-30 12:49 603package com.Utils; import java. ... -
tools----java---->mail
2010-12-20 20:28 589package cn.java; import java.u ... -
工具类-------字符串转成时间格式
2010-12-20 20:14 651package cn.java; import java.t ... -
处理中文乱码(新,比较万能)(encodeURI)
2010-12-19 01:04 1131$.ajax({ type:"GET ...
相关推荐
3. **iter()和items()**:`iter()`方法遍历所有的键,而`items()`返回一个迭代器,产生元组的形式 `(key, value_list)`,其中value_list是与key关联的所有值的列表。 4. **yamldump()和yamlload()**:为了方便与YAML...
对于字典,遍历所有键值对,并将它们以`key=value`的形式添加到字符串中,用`sep2`分隔键值对,用`sep3`分隔键和值。 - 如果字段类型实现了`IList`接口,这是一个列表。遍历列表中的每个元素,并将其添加到字符串中...
对于数组,JsonView会以列表形式呈现,每个元素都有对应的索引,而对象则以键值对的形式展示。 在实际应用中,JsonView工具对于前端开发者调试API接口、后端开发者验证返回数据以及数据分析师处理JSON格式数据都...
Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,也就是说,散列类型不能嵌套其他的数据类型。...
循环结束后,`StringBuilder`包含了所有按字典顺序排列的键值对,以`key=value`的形式。返回这个字符串,就可以在其他地方使用,如计算签名、构造URL等。 5. **应用场景**: - **创建HTTP请求签名**:在许多API...
最后,返回构建的字符串表示形式。 2. **`DeserializeObject<T>` 方法**: 这个泛型方法接收一个字符串 `s` 和一个类型参数 `T`,创建一个新的 `T` 类型的实例 `o`,然后解析输入字符串中的字段值。它首先获取 `T`...
`FieldStorage`实例化后,它会将所有的表单字段以键值对的形式存储,键是表单字段名,值可能是不同类型的数据对象: 1. `FieldStorage`对象:用于处理文件上传或multipart/form-data格式的数据。 2. `...
在Vue.js开发中,处理对象数组并根据特定属性进行数据合并和重组是常见的需求。本问题探讨了如何根据`TYPE`和`REMARK`两个属性的值来决定是否合并对象,并生成新的数组对象。首先,我们需要理解源数据的结构,然后...
所谓JSON对象,在JavaScript中通常指的是一种以字符串形式存储的数据,它遵循JavaScript对象的表示法,即由花括号`{}`包围,里面可以包含零个或多个键值对,键和值之间由冒号`:`分隔,不同键值对之间由逗号`,`分隔。...
索引数组按照参数顺序排列,关联数组则使用键值对形式。 #### 响应对象 - **响应结构**:响应对象必须包含 "jsonrpc" 字段,其值为 "2.0",表明遵循 JSON-RPC 2.0 协议。 - **结果返回**:如果请求成功,响应对象...
在JavaScript中,JSON对象通常是键值对的形式,可以通过键来访问对应的值。 在判断JSON数据中是否存在某字段时,我们可能会尝试使用以下几种方法: 1. **通过索引访问并检查是否等于`undefined`**: ```...
在转换过程中,我们可以为每个商品创建一个新的数组,并将这些字段作为键值对添加到数组中。 接下来,我们需要针对每个商品的属性再执行一次循环,将商品的所有属性都添加到对应的数组中。假设商品对象有多个属性,...
主要包括List(顺序列表)、Set(无序不重复集合)和Map(键值对映射)。ArrayList、LinkedList、HashSet、HashMap等是常用的实现类。 以上只是Java面向对象编程的一部分关键知识点,实际学习过程中还需要结合具体...
多态是面向对象的另一大特性,它允许同一种行为在不同对象上有不同的表现形式。在Java中,多态主要体现在方法的覆盖和接口的实现上,通过父类引用指向子类对象,可以调用子类特有的方法。 5. **抽象类与接口**: ...
- `getAll(key)`:返回指定键的所有值,以数组形式返回。 例如: ```javascript formdata.get("key"); // 返回第一个值 formdata.getAll("key"); // 返回所有值 ``` #### b. 追加数据 使用`append()`方法可以在...
`convertArray()` 函数是一个辅助函数,它的目的是将`serializeArray()`返回的键值对数组转换为一个对象,其中键对应于表单字段的名称,值则为该字段的所有值以逗号分隔的形式。这样做的好处是,如果一个表单字段多...
- 数据库查询结果通常以ResultSet形式返回,需要遍历ResultSet并将其转换为Java对象。 6. 页面展示: - 转换后的数据可能需要在网页上显示,这可能涉及到JSP、Thymeleaf或其他模板引擎。 - 使用ModelAndView或...
JSON的语法规定数据以键值对的形式存在,键和值之间用冒号隔开,各个键值对之间用逗号分隔。JSON的值可以是数字、字符串、布尔值、数组、对象或null。与XML相比,JSON具有体积小、传输速度快、可读性强、与...
JSON是一种数据交换格式,以键值对的形式存储数据,易于人阅读和编写,同时也易于机器解析和生成。JSON数据结构主要包含对象(Object)、数组(Array)、字符串(String)、数值(Number)、布尔值(Boolean)和...
14. 反射:反射机制允许在运行时动态获取类的信息并操作对象,如创建对象、调用方法、访问字段等。 15. 注解:注解是元数据的一种形式,提供了一种安全地将信息附加到代码的方式,可以在编译时或运行时被处理。 ...