检查收到的JSON是否在Java中具有必要的值

时间:2019-03-05 19:55:30

标签: java json

我有一个API端点,用于接收JSON文件,并根据这些文件创建对象。我也有另一个预先存在的对象,并且我正在尝试检查接收到的JSON中的某些值是否与我现有对象中的某些值匹配。如果字段匹配,我将继续进一步处理文件,否则,我将对其进行剪贴。到目前为止,我的想法只是让if语句检查每个值,但是有更好的方法吗?还是陈述是否正确?

仅使用if语句的意思非常简单的代码示例。

public boolean compareObjects(recievedObject, existingObject) {
    if( !(recievedObject.getName().equals(existingObject.getName()))) {
        //true
    } else if( !(recievedObject.getLocation().equals(existingObject.getLocation())) ) {
        return false;
    }
    // else if ... etc 

    return true;
}

请注意,我并不是要检查接收到的文件是否具有所有必需的JSON字段,只是一些特定字段具有某些值。

编辑:

JSON将是一个非常扁平的结构,例如

{
    "name": "name",
    "location": "location",
    ...
}

所以我的对象将是非常基本的

public class recievedObject {
    String location;
    String name;

    public String getLocation() {
        return location;
    }

    public String getName() {
        return name;
    }
}

2 个答案:

答案 0 :(得分:0)

为您的类定义一个类似于“等于”的方法,并在端点处检查existingObject.check(receivedObject),将import java.util.Objects添加到您的类中

public boolean check(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    RecievedObject receivedObject=(RecievedObject) o;

   //add based on the logic you want
    return Objects.equals(location, receivedObject.location) &&
            Objects.equals(name, receivedObject.name);
}

答案 1 :(得分:0)

您可以避免很多其他陈述,而是创建一些验证抽象。

interface Validator<A, B> {
  boolean validate(A receivedObject, B existingObject);
}

然后为每个if创建Validator的新实现。

class NameValidator implements Validator<Expeceted, Received> {
  @Override
  public boolean validate(Expeceted receivedObject, Received existingObject) {
    return existingObject.getName().equals(receivedObject.getName());
  }
}   

class LocationValidator implements Validator<Expeceted, Received> {
  @Override
  public boolean validate(Expeceted receivedObject, Received existingObject) {
    return existingObject.getLocation().equals(receivedObject.getLocation());
  }
}

您可以创建此类验证器的列表

List<Validator<Expeceted, Received>> validators = Arrays.asList(
  new NameValidator(),
  new LocationValidator()
);

最后,您的compare方法可以简单地遍历所有验证器。

public boolean compareObjects(Received recievedObject, Expeceted expecetedObject) {
  for (Validator<Expeceted, Received> validation : validators) {
    if (! validation.validate(expecetedObject, recievedObject)) {
      return false;
    }
  }
  return true;
}

这样,您可以稍后简单地添加新的验证器,并保持compare方法不变。