【问题标题】:Java : 64 based string decode / parse failedJava:基于 64 的字符串解码/解析失败
【发布时间】:2018-02-15 23:59:32
【问题描述】:

我正在尝试转换这个基于 64 位的编码 JSON 字符串,并使用 flexjson API 将接收到的 JSON 转换为 POJO。

第一个尝试块,将直接JSON作为字符串转换为成功的对象。该字符串使用在线工具解码。

现在第二个尝试块,尝试以类似的方式将基于 64 的字符串转换为对象,但在运行时转换基于 64 的字符串,这会引发异常 flexjson.JSONException: Expected a ',' or ']' at字符 10

 try {
        AsyncResponseDO asyncResponseDO = new JSONDeserializer<AsyncResponseDO>().deserialize("{\"relatesTo\":\"7_Sept2017_IF01\"}", AsyncResponseDO.class);
        System.out.println(asyncResponseDO.getRelatesTo());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

try {
        AsyncResponseDO asyncResponseDO = new JSONDeserializer<AsyncResponseDO>().deserialize(Base64.decodeBase64("eyJyZWxhdGVzVG8iOiI3X1NlcHQyMDE3X0lGMDEifQ==".getBytes()).toString(), AsyncResponseDO.class);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

POJO 类:

public class AsyncResponseDO {
private String relatesTo; 

public String getRelatesTo() {
    return relatesTo;
}
public void setRelatesTo(String relatesTo) {
    this.relatesTo = relatesTo;
}
}

【问题讨论】:

  • getBytes 应该在那里实现什么? Base64.decodeBase64 不接受简单的文本文字/字符串作为参数吗?
  • @CBroe 不,它只接受 byte[] byte[] org.apache.commons.codec.binary.Base64.decodeBase64(byte[] arg0)
  • @CBroe byte[] decodeBase64(String base64String) 从 1.4 开始可用,我在 1.2。
  • 在将其解码为 JSON 之前,您是否至少检查过结果?
  • 新字符串(Base64.decodeBase64("eyJyZWxhdGVzVG8iOiI3X1NlcHQyMDE3X0lGMDEifQ==".getBytes()));

标签: java json json-deserialization flexjson


【解决方案1】:

新字符串(Base64.decodeBase64("eyJyZWxhdGVzVG8iOiI3X1NlcHQyMDE3‌X0lGMDEifQ==".getByt‌es()));

这将转换为正确的字符串。

我提到了https://www.mkyong.com/java/how-do-convert-byte-array-to-string-in-java/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2013-10-03
    • 2012-05-04
    相关资源
    最近更新 更多