У меня есть метод Java, который получит минимизированную строку JSON, напоминающую:
{
"fizz": {
"_id": "6"
}
}
{
"foo": "bar"
}
... (same two above objects repeated but with different values)
Следовательно, минимизированная строка будет {"fizz":{"_id":"6"}}
. Строка будет отличаться при каждом вызове метода (очевидно), но она будет придерживаться следующего формата:
"CHUNK" Consists of:
{"<ANYTHING>":{"_id":"<SOME_NUMBER>"}}{<ANY_JSON_OBJECT>}
Таким образом, в качестве другого примера метод может получить следующую строку в качестве входных данных (не уменьшая ее, чтобы сделать пример более понятным):
{
"fizz": {
"_id": "6"
}
}
{
"foo": "bar"
}
{
"swarm": {
"_id": "18"
}
}
{
"whistle": "feather",
"saywhat": true
}
{
"beef": {
"_id": "23"
}
}
{
"active": "NO"
}
Мне нужно извлечь список всех строковых значений _id
в данном JSON, поэтому в приведенном выше примере я бы хотел получить List<String>
, содержащий "6", "18" и " 23" . Моя лучшая попытка:
public List<String> extractIds(String json) {
Pattern pattern = Pattern.compile("\"_id\":.*");
Matcher matcher = pattern.matcher(json);
List<String> ids = new ArrayList<>();
while(matcher.find()) {
ids.add("???");
}
return ids;
}
Но я не уверен, что мое регулярное выражение поднято и / или как использовать Matcher API для извлечения следующего извлеченного идентификатора в группе.
Есть идеи, куда я иду?