`
竹临仙
  • 浏览: 38119 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

对象的字段以键值对的形式返回

 
阅读更多
但是,如果双向关联都设置成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);
}
}
分享到:
评论

相关推荐

    Python-Multidict是类似于dict支持多个Key的键值对集合

    3. **iter()和items()**:`iter()`方法遍历所有的键,而`items()`返回一个迭代器,产生元组的形式 `(key, value_list)`,其中value_list是与key关联的所有值的列表。 4. **yamldump()和yamlload()**:为了方便与YAML...

    自定义序列化对象c# (2).pdf

    对于字典,遍历所有键值对,并将它们以`key=value`的形式添加到字符串中,用`sep2`分隔键值对,用`sep3`分隔键和值。 - 如果字段类型实现了`IList`接口,这是一个列表。遍历列表中的每个元素,并将其添加到字符串中...

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    循环结束后,`StringBuilder`包含了所有按字典顺序排列的键值对,以`key=value`的形式。返回这个字符串,就可以在其他地方使用,如计算签名、构造URL等。 5. **应用场景**: - **创建HTTP请求签名**:在许多API...

    JsonView工具

    对于数组,JsonView会以列表形式呈现,每个元素都有对应的索引,而对象则以键值对的形式展示。 在实际应用中,JsonView工具对于前端开发者调试API接口、后端开发者验证返回数据以及数据分析师处理JSON格式数据都...

    Redis中散列类型的常用命令小结

    Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,也就是说,散列类型不能嵌套其他的数据类型。...

    自定义序列化对象c# (2).docx

    最后,返回构建的字符串表示形式。 2. **`DeserializeObject&lt;T&gt;` 方法**: 这个泛型方法接收一个字符串 `s` 和一个类型参数 `T`,创建一个新的 `T` 类型的实例 `o`,然后解析输入字符串中的字段值。它首先获取 `T`...

    《python核心编程》第二十章:web编程1

    `FieldStorage`实例化后,它会将所有的表单字段以键值对的形式存储,键是表单字段名,值可能是不同类型的数据对象: 1. `FieldStorage`对象:用于处理文件上传或multipart/form-data格式的数据。 2. `...

    vue 对象数组中,根据相同属性的数据合并,重组新的数组对象

    在Vue.js开发中,处理对象数组并根据特定属性进行数据合并和重组是常见的需求。本问题探讨了如何根据`TYPE`和`REMARK`两个属性的值来决定是否合并对象,并生成新的数组对象。首先,我们需要理解源数据的结构,然后...

    JS判断是否为JSON对象及是否存在某字段的方法(推荐)

    所谓JSON对象,在JavaScript中通常指的是一种以字符串形式存储的数据,它遵循JavaScript对象的表示法,即由花括号`{}`包围,里面可以包含零个或多个键值对,键和值之间由冒号`:`分隔,不同键值对之间由逗号`,`分隔。...

    JSON-RPC 2.0 规范(中文版)

    索引数组按照参数顺序排列,关联数组则使用键值对形式。 #### 响应对象 - **响应结构**:响应对象必须包含 "jsonrpc" 字段,其值为 "2.0",表明遵循 JSON-RPC 2.0 协议。 - **结果返回**:如果请求成功,响应对象...

    JS中如何判断传过来的JSON数据中是否存在某字段

    在JavaScript中,JSON对象通常是键值对的形式,可以通过键来访问对应的值。 在判断JSON数据中是否存在某字段时,我们可能会尝试使用以下几种方法: 1. **通过索引访问并检查是否等于`undefined`**: ```...

    在laravel中实现将查询的对象转换为多维数组的函数

    在转换过程中,我们可以为每个商品创建一个新的数组,并将这些字段作为键值对添加到数组中。 接下来,我们需要针对每个商品的属性再执行一次循环,将商品的所有属性都添加到对应的数组中。假设商品对象有多个属性,...

    java面向对象专题

    主要包括List(顺序列表)、Set(无序不重复集合)和Map(键值对映射)。ArrayList、LinkedList、HashSet、HashMap等是常用的实现类。 以上只是Java面向对象编程的一部分关键知识点,实际学习过程中还需要结合具体...

    JAVA的核心技术:面向对象编程

    多态是面向对象的另一大特性,它允许同一种行为在不同对象上有不同的表现形式。在Java中,多态主要体现在方法的覆盖和接口的实现上,通过父类引用指向子类对象,可以调用子类特有的方法。 5. **抽象类与接口**: ...

    JS FormData对象使用方法实例详解

    - `getAll(key)`:返回指定键的所有值,以数组形式返回。 例如: ```javascript formdata.get("key"); // 返回第一个值 formdata.getAll("key"); // 返回所有值 ``` #### b. 追加数据 使用`append()`方法可以在...

    与jquery serializeArray()一起使用的函数,主要来方便提交表单

    `convertArray()` 函数是一个辅助函数,它的目的是将`serializeArray()`返回的键值对数组转换为一个对象,其中键对应于表单字段的名称,值则为该字段的所有值以逗号分隔的形式。这样做的好处是,如果一个表单字段多...

    java行转列的例子

    - 数据库查询结果通常以ResultSet形式返回,需要遍历ResultSet并将其转换为Java对象。 6. 页面展示: - 转换后的数据可能需要在网页上显示,这可能涉及到JSP、Thymeleaf或其他模板引擎。 - 使用ModelAndView或...

    安卓中解析json数据.docx

    JSON的语法规定数据以键值对的形式存在,键和值之间用冒号隔开,各个键值对之间用逗号分隔。JSON的值可以是数字、字符串、布尔值、数组、对象或null。与XML相比,JSON具有体积小、传输速度快、可读性强、与...

    CXF利用Json格式传输对象

    JSON是一种数据交换格式,以键值对的形式存储数据,易于人阅读和编写,同时也易于机器解析和生成。JSON数据结构主要包含对象(Object)、数组(Array)、字符串(String)、数值(Number)、布尔值(Boolean)和...

    《Java面向对象程序设计》

    14. 反射:反射机制允许在运行时动态获取类的信息并操作对象,如创建对象、调用方法、访问字段等。 15. 注解:注解是元数据的一种形式,提供了一种安全地将信息附加到代码的方式,可以在编译时或运行时被处理。 ...

Global site tag (gtag.js) - Google Analytics