Как получить значение по ключу из строки (String)?

197
14 октября 2017, 17:25

Всем доброго времени суток!

После сканирования QR-кода, и раскодирования данных я получаю такую строку (String):

D/vResult: {"Command":"101","ContractorGUID":"{29545D4D-7AC9-4FCB-9E5C-B7AF4D9A70B5}"}

Мне необходимо извлечь значение ключа ContractorGUID. В данный момент, для этого я использую обрезание строки (.substring):

vResult.substring(35, vResult.length() - 2)

Вопрос: Есть ли какое-то более простое решение этой задачи? Что-то по типу метода .getString, как в JSONObject.

Answer 1

Можно воспользоваться любой удобной библиотекой работы с JSON и получить результат:

String vResult = "{\"Command\":\"101\",\"ContractorGUID\":\"{29545D4D-7AC9-4FCB-9E5C-B7AF4D9A70B5}\"}";
System.out.println("vResult: " + vResult);
try {
    org.json.simple.parser.JSONParser parser = new org.json.simple.parser.JSONParser();
    org.json.simple.JSONObject result = (org.json.simple.JSONObject) parser.parse(vResult);
    String value = (String) result.get("ContractorGUID");
    System.out.println("value: " + value);
} catch (org.json.simple.parser.ParseException e) {
    System.out.println("Error: " + e);
}

Консоль:

vResult: {"Command":"101","ContractorGUID":"{29545D4D-7AC9-4FCB-9E5C-B7AF4D9A70B5}"}
value: {29545D4D-7AC9-4FCB-9E5C-B7AF4D9A70B5}
Answer 2
String[] parts = vResult.split("ContractorGUID":"{:", 2);
System.out.println(parts[1]); 
Answer 3

Можно регуляркой вытащить:

String vResult = "{\"Command\":\"101\",\"ContractorGUID\":\"{29545D4D-7AC9-4FCB-9E5C-B7AF4D9A70B5}\"}";
System.out.println("vResult: " + vResult);
java.util.regex.Pattern p = java.util.regex.Pattern.compile("^.+ContractorGUID\":\"(\\{.+\\})\"}$");
java.util.regex.Matcher m = p.matcher(vResult);
String value = m.matches() ? m.group(1) : null;
System.out.println("value: " + value);

Консоль:

vResult: {"Command":"101","ContractorGUID":"{29545D4D-7AC9-4FCB-9E5C-B7AF4D9A70B5}"}
value: {29545D4D-7AC9-4FCB-9E5C-B7AF4D9A70B5}
READ ALSO
Использование sharedPreferences

Использование sharedPreferences

есть приложение под android, в нем класс Sharedpref

148
Как создать “базу данных”? [требует правки]

Как создать “базу данных”? [требует правки]

Новичок, только начал изучать JavaОбъясните, пожалуйста, как создают базы данных в Java

192
Production для front-end и backend сервисов

Production для front-end и backend сервисов

Я разрабатываю приложение, которые имеет два отдельных сервисаОдин из них -> create-react-app, который воспроизводится на порте 3000, другой spring boot rest API service,...

153
Что такое спецификация и реализация для Java?

Что такое спецификация и реализация для Java?

Смотрю вебинар и там как то прошелся по теме Java спецификация и JDK реализацияМожно ли в доходчивом языке описать со структурой что это и как...

183