给定参数Json字符串或者是Json对象,和需要查找的属性的key值,调用方法后可以获取到对应属性的值的FinalFastJsonObject对象,然后根据需要获取对象的值。
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
/**
* json查找类
*/
@Data
public class FinalFastJsonObject implements Serializable {
private static final long serialVersionUID = 1L;
private Object object;
private boolean isArray;
public JSONArray getJSONArray() {
return (JSONArray) object;
}
public JSONObject getJSONObject() {
return (JSONObject) object;
}
public String getValue() {
return (String) object;
}
public Object getObjectValue() {
return object;
}
public boolean isNullOrBlankValue() {
if (object == null) {
return true;
}
if (object instanceof String) {
return StringUtils.isBlank((String) object);
}
return false;
}
}
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
/**
* 仅适用于查找唯一的属性
*/
@Slf4j
public class FindFastJsonUtil {
public static FinalFastJsonObject findJsonKeyOnlyObject(String fullResponseJson, String key) {
FinalFastJsonObject finalObject = new FinalFastJsonObject();
findOnlyObject(JSONObject.parseObject(fullResponseJson), key, finalObject);
return finalObject;
}
public static FinalFastJsonObject findKeyOnlyObject(JSONObject fullResponse, String key) {
FinalFastJsonObject finalObject = new FinalFastJsonObject();
findOnlyObject(fullResponse, key, finalObject);
return finalObject;
}
/**
* 从json中查找对象
*
* @param fullResponse json对象
* @param key json key
* @param finalObject 传入的固定对象
*/
private static void findOnlyObject(JSONObject fullResponse, String key, FinalFastJsonObject finalObject) {
if (fullResponse == null) {
return;
}
fullResponse.keySet().forEach(keyStr -> {
Object keyvalue = fullResponse.get((String) keyStr);
if (keyvalue instanceof JSONArray) {
if (key.equals(keyStr)) {
finalObject.setArray(true);
finalObject.setObject(keyvalue);
} else {
for (int i = 0; i < ((JSONArray) keyvalue).size(); i++) {
Object obj = ((JSONArray) keyvalue).get(0);
if (obj instanceof JSONObject) {
findOnlyObject(((JSONObject) obj), key, finalObject);
}
}
}
} else if (keyvalue instanceof JSONObject) {
if (key.equals(keyStr)) {
finalObject.setObject(keyvalue);
} else {
findOnlyObject((JSONObject) keyvalue, key, finalObject);
}
} else {
if (key.equals(keyStr)) {
finalObject.setObject(keyvalue);
}
}
});
}
}