Как читать json-объект и как его хранить в буфере или массиве байтов в java [duplicate]

Используя ES2017, вы должны иметь это как объявление функции

async function foo() {
    var response = await $.ajax({url: '...'})
    return response;
}

и выполнить его следующим образом.

(async function() {
    try {
        var result = await foo()
        console.log(result)
    } catch (e) {}
})()

Или синтаксис Promise

foo().then(response => {
    console.log(response)

}).catch(error => {
    console.log(error)

})
2
задан Yubaraj 31 October 2014 в 11:02
поделиться

4 ответа

Наконец, я решил проблему с помощью библиотеки apache commons . Сначала я использовал следующую зависимость.

<dependency>
  <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.6</version>
  <type>jar</type>
</dependency>

Техника, которую я использовал ранее, была неправильной для меня (Не уверен для других) . Ниже приведено решение, как я решил свою проблему.

Решение:

Я добавил значение байтового массива ранее в JSONObject и сохранил его как String. Когда я попытался перейти из JSONObject в массив байтов, он вернул String, а не мой исходный массив байтов. И не получил исходный массив байтов, даже я использую следующее:

byte[] bArray=jSONObject.getString(key).toString().getBytes();

Теперь,

Сначала я закодировал свой байтовый массив в строку и сохранил JSONObject для этого закодированная строка. См. Ниже:

byte[] bArray=(myByteArray);
//Following is the code that encoded my byte array and kept on String
String encodedString = org.apache.commons.codec.binary.Base64.encodeBase64String(bArray);
jSONObject.put(JSONConstant.BYTE_ARRAY_LIST , encodedString);

И код, в который я возвращаю свой исходный массив байтов:

String getBackEncodedString = jSONObject.getString(JSONConstant.BYTE_ARRAY_LIST);
//Following code decodes to encodedString and returns original byte array
byte[] backByte = org.apache.commons.codec.binary.Base64.decodeBase64(getBackEncodedString);
//Creating pdf file of this backByte
FileCreator.createPDF(backByte, "fileAfterJSONObject.pdf");

Вот и все.

3
ответ дан Yubaraj 31 August 2018 в 16:16
поделиться

Для примера тестов (используется com.fasterxml.jackson):

        byte[] bytes = "pdf_report".getBytes("UTF-8");
        Mockito.when(reportService.createPackageInvoice(Mockito.any(String.class))).thenReturn(bytes);
        String jStr = new ObjectMapper().writeValueAsString(bytes).replaceAll("\\\"", ""); // return string with a '\"' escape...
        mockMvc.perform(get("/api/getReport").param("someparam", "222"))
                .andExpect(status().isOk())
                .andExpect(content().contentType(APPLICATION_JSON_UTF8))
                ...
                .andExpect(jsonPath("$.content", is(jStr)))
        ;
0
ответ дан CamelTM 31 August 2018 в 16:16
поделиться

Это может помочь тем, кто использует Java 8. Используйте java.util.Base64.

Кодирование байтового массива в String:

String encodedString = java.util.Base64.getEncoder().encodeToString(byteArray);
JSONObject.put("encodedString",encodedString);

Декодировать массив байтов из String:

String encodedString = (String) JSONObject.get("encodedString");
byte[] byteArray = java.util.Base64.getDecoder().decode(encodedString);
0
ответ дан shark1608 31 August 2018 в 16:16
поделиться

При вставке байтового массива в JSONObject вызывается метод toString ().

public static void main(String... args) throws JSONException{
    JSONObject o = new JSONObject();
    byte[] b = "hello".getBytes();
    o.put("A", b);
    System.out.println(o.get("A"));
}

Пример вывода:

[B@1bd8c6e

, поэтому вам нужно сохранить его в способ, которым вы можете разобрать String в исходный тип данных.

-2
ответ дан user 31 August 2018 в 16:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: