フィルタとして別のJSONオブジェクトを使用して特定のJSONファイルをフィルタリングできるようにする関数があります。配列の一部を含むJSONファイルのフィルタ
を参照してくださいコード:
public Map<String, Entry<JsonObject, Long>> loadFilter(Coll<?> coll, JsonObject filter){
// Create Ret
Map<String, Entry<JsonObject, Long>> ret = null;
// Get Directory
File directory = getDirectory(coll);
if (! directory.isDirectory()) return ret;
// Find All
File[] files = directory.listFiles(JsonFileFilter.get());
// Create Ret
ret = new LinkedHashMap<String, Entry<JsonObject, Long>>(files.length);
// Filter rules
Set<Map.Entry<String, JsonElement>> filterRules = filter.entrySet();
// For Each Found
for (File file : files)
{
// Get ID
String id = idFromFile(file);
// Get Entry
Entry<JsonObject, Long> entry = loadFile(file);
// Trying to fix a weird condition causing a NPE error
if(entry == null) continue;
if(entry.getKey() == null) continue;
// Compare the files with the given filter
Set<Map.Entry<String, JsonElement>> fileEntries = entry.getKey().entrySet();
if (fileEntries.containsAll(filterRules)) {
// Add found data to return list
ret.put(id, entry);
}
}
return ret;
}
私は、次のJSON持って想像:私は何をしようとしている
{
"objects": [
"object1",
"object2"
],
}
は、配列オブジェクトは、オブジェクト1含まれているすべてのファイルを除外しています。私はオブジェクト2については気にしませんが、オブジェクト配列内に少なくともobject1を持つファイルを除外したいと思います。
何で結果以下のコード:
JsonObject filter = new JsonObject();
JsonArray array = new JsonArray();
array.add(new JsonPrimitive("object1"));
filter.add("objects", array);
Map<String, Entry<JsonObject, Long>> result = loadFilter(coll, filter); // nothing
すべてのヘルプがにappriciatedされます。
ご迷惑をおかけしました。私は基本的には、私はこの関数に、私のフルフィルターで持っているすべての配列を置くだろうか? –
正しいですが、 'predicate'は配列である複数のフィールドを持つ' JsonObject'です。 – izstas