【问题标题】:Convert byte[] to custom java object将 byte[] 转换为自定义 java 对象
【发布时间】:2018-09-17 06:15:03
【问题描述】:
 private static MyClass doWork(byte[] body){        

    String data = new String(body);   
    Gson gson = new Gson();     
    final MyClass myClass = gson.fromJson(data, MyClass .class);  
    System.out.println("outsideLead"+myClass);
    return myClass;
}

byte[] body = {"N":"string","A":"string"}

当我尝试将我的 Byte[] 转换为 MyClass 类型的对象时,它会抛出一个错误,应该是 json 对象,而不是找到了一个 json 原语。 正确的做法是什么??

【问题讨论】:

  • 找到了一个 json 原语?你知道 Java 没有 json 类型的原语,对吧?
  • 预期为 com.google.gson.JsonObject 但为 com.google.gson.JsonPrimitive - 这是错误
  • 请发布您的MyClass 课程并使用该错误更新问题。
  • @Stultuske 它的 gson 错误说 myclass 将某个字段声明为对象,但它是一个值 - 数字或字符串,例如

标签: java arrays json byte


【解决方案1】:

我猜你的 byte[] 正文不包含“{”和“}”。尝试以下类似的方法,它应该可以工作:

byte[] body = "{\"N\":\"string\",\"A\":\"string\"}".getBytes();

错误只是说不是找到一个 JSON 对象(总是以'{'开头) - 解析器得到一个原语 - 我猜是字符串“N”。

【讨论】:

  • 谢谢它的作用就像一个魅力,但由于我在程序中的字符串是动态的,我应该写一个正则表达式在双引号前附加转义字符,我该怎么做
  • String data1 = new String(body1); data1 = data1.replaceAll("\"", "\\\"");
  • 我尝试过这样的事情,它给我一个错误:om.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path
  • 您不需要在字符串中使用“\”。仅当您在 Java 代码中按字面意思使用它时才需要它。
  • 当我动态传递它时它会抛出上述错误
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 2014-04-17
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多