Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检索字段列表中描述的对象字段_Java_Json - Fatal编程技术网

Java 检索字段列表中描述的对象字段

Java 检索字段列表中描述的对象字段,java,json,Java,Json,我有一个列表,其中包含要从基本对象检索的字段。我试着用地图,但没用。例如: 为了更好地描述,我将下面的基本对象审计作为json { "sendDate": "11/11/2017", "id": "1", "user": "name1", "role": "admin", "auditType": "download", "points": 3 } 例如,我从不同的微服务中得到一个列表,其中包含要返回的字段 ["sendDate", "i

我有一个列表,其中包含要从基本对象检索的字段。我试着用地图,但没用。例如: 为了更好地描述,我将下面的基本对象审计作为json

{
    "sendDate": "11/11/2017",
    "id": "1",
    "user": "name1",
    "role": "admin",    
    "auditType": "download",
    "points": 3
}
例如,我从不同的微服务中得到一个列表,其中包含要返回的字段

["sendDate", "id", "auditType"] 
对于这个例子,我应该返回以下内容:

{
    "sendDate": "11/11/2017",
    "id": "1",  
    "auditType": "download"
}

我必须返回审计类型,其中只包含字段列表中描述的字段。有什么聪明的解决办法吗?我知道我可能会使用很多if,但实际情况要复杂得多,所以我目前正在寻找一个智能解决方案,但找不到任何解决方案。谢谢

假设您有一个java类,其字段的名称与json示例中的键类似,并且您希望从源对象中创建一个新对象,其中只设置了选定的字段,那么您可以使用以下方法:

@SuppressWarnings("unchecked")
public <T> T getObjectWithSelectedFields(T sourceObject, Collection<String> fields)
    throws InstantiationException, IllegalAccessException {
  Class<?> clazz = sourceObject.getClass();
  Object targetObject = clazz.newInstance();

  Arrays.stream(clazz.getDeclaredFields()).filter(f -> fields.contains(f.getName())).forEach(f -> {
    try {
      f.set(targetObject, f.get(sourceObject));
    } catch (IllegalArgumentException | IllegalAccessException e) {
      // TODO ...
    }
  });

  return (T)targetObject;
 }
您可以使用getter和setter轻松实现类似的方法


但是,请不要担心这会创建一个与源对象审计类型相同的新对象。不同之处在于,只设置字段列表中提供的字段,其他所有字段都将为空。您不能做的是动态创建一个只包含您请求的字段的新类。在这种情况下,我宁愿将选择值收集到地图上。

您的数据是以什么形式提供的?纯文本/字符串?jsonobject?