JSON массив в виде строки в byte[]

214
02 июня 2018, 19:20

Подскажите может есть более лучший способ перегнать такое "[1,2,3,4,5,6,7,8, ...]" в массив байт? В данном случае в строке в массиве это байты.

В гугле нашел такое решение.

String response = "[-47, 1, 16, 84, 2, 101, 110, 83, 111, 109, 101, 32, 78, 70, 67, 32, 68, 97, 116, 97]"; 
String[] byteValues = response.substring(1, response.length() - 1).split(",");
byte[] bytes = new byte[byteValues.length];
for (int i=0, len=bytes.length; i<len; i++) {
   bytes[i] = Byte.parseByte(byteValues[i].trim());     
}
String str = new String(bytes);

Может более лучший способ такое сделать?

Answer 1

Можно использовать Gson для этого

byte[] bytes = new Gson().fromJson(response, byte[].class); 
Answer 2

Вариант с использованием Jackson:

byte[] bytes = new ObjectMapper().readValue(jsonStr, byte[].class);

Вариант с использованием org.json:

JSONArray jsonArray = new JSONArray(response);
byte[] bytes = new byte[jsonArray.length()];
for (int i = 0; i < bytes.length; i++) {
    bytes[i] = Byte.parseByte(jsonArray.get(i).toString());
}

Вариант с использованием javax.json и стримов:

try (JsonReader jsonReader = Json.createReader(new StringReader(response))) {
    JsonArray jsonArray = jsonReader.readArray();
    int[] bytes = jsonArray.stream()
                           .map(Objects::toString)
                           .mapToInt(Byte::parseByte)
                           .toArray();
}

Правда в этом варианте используются целые числа, так как байтовых стримов не существует и попытки работы с байтами превращаются в костылестроение.

READ ALSO
Множественный выбор в ExpandableListView

Множественный выбор в ExpandableListView

В разметку активности добавил ExpandableListViewКак я могу добавить множественный выбор для каждого элемента подгруппы и впоследствии добавлять...

177
IoC-контейнер spring и обращение через интерфейсы

IoC-контейнер spring и обращение через интерфейсы

Присутствует класс IndexMatrix и он имплемитирует интерфейс IMatrix:

189
Сохранение и вывод данных

Сохранение и вывод данных

Есть 3 поля с даными, вводимыми пользователями: имя, дата рождения, место рождениянадо записать эти данные в файл а потом из файла запихнуть...

209
Spring Value: почему некорректно видит переменные?

Spring Value: почему некорректно видит переменные?

Я вынес все данные в properties, например, с такими полями:

183