Если кто-то просто хочет извлечь значения из простых объектов JSON без необходимости вложенных структур, можно использовать регулярные выражения, даже не выходя из bash.
Вот функция, которую я определил с помощью bash regular выражения, основанные на стандарте JSON :
function json_extract() {
local key=$1
local json=$2
local string_regex='"([^"\]|\\.)*"'
local number_regex='-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?'
local value_regex="${string_regex}|${number_regex}|true|false|null"
local pair_regex="\"${key}\"[[:space:]]*:[[:space:]]*(${value_regex})"
if [[ ${json} =~ ${pair_regex} ]]; then
echo $(sed 's/^"\|"$//g' <<< "${BASH_REMATCH[1]}")
else
return 1
fi
}
Предостережения: объекты и массивы не поддерживаются как значение, но поддерживаются все другие типы значений, определенные в стандарте. Кроме того, пара будет сопоставляться независимо от того, насколько глубоко в документе JSON она сохраняется до тех пор, пока она имеет точно такое же имя ключа.
Используя пример OP:
$ json_extract text "$(curl 'http://twitter.com/users/username.json')"
My status
$ json_extract friends_count "$(curl 'http://twitter.com/users/username.json')"
245
Чтобы преобразовать строку в double, должен выполнить следующий код:
public double doubleString(String text){
return Double.parseDouble(text);
}
Возможно, вы захотите перехватить NumberFormatException , чтобы обработать случай недопустимого значения для преобразования в Double.
Я предполагаю, что вам нужно имя метода вызывающего абонента, а затем сравнить его. Насколько я понимаю, это то, что вам нужно.
String callerMethodName = Thread.currentThread().getStackTrace()[2].getMethodName();
Обратите внимание, что вам может понадобиться заменить 2 на 1.
Другим способом может быть отправка имени метода в качестве параметра в вашем втором методе, например: -
public double method2(String callerMethodName){
}