Несколько лучше, избегая возможных последствий для использования с помощью eval
, является
declare $var="$val"
. Обратите внимание, что declare
является синонимом typeset
в bash
. Команда typeset
более широко поддерживается (ksh
и zsh
также используют ее):
typeset $var="$val"
Вы можете попробовать это:
Pattern pattern = Pattern.compile("\"_id\"\\s*:\\s*\"(.*?)\"");
Matcher matcher = pattern.matcher(json);
List<String> ids = new ArrayList<>();
while(matcher.find()) {
ids.add(matcher.group(1));
}
\"_id\"
проверяет предыдущий раздел "_id"
,
\\s*:\\s*
проверяет ноль или больше пробелов, двоеточие :
и снова ноль или больше пробелов (возможно, я мог бы пропустить часть пробелов, но я не знаком с JSON, поэтому я не знал, может ли быть несколько пробелов или нет) [1110 ]
\"(.*?)\"
создает группу 1 , которая содержит нужный идентификатор, заключенный в ""
(если вы хотите использовать двойные кавычки в вашем массиве, используйте регулярное выражение \"_id\"\\s*:\\s*(.*?)
)
[ 1111]
Наконец, когда мы находим совпадение с регулярным выражением, мы добавляем содержимое группы 1 в ArrayList, используя matcher.group(1)