com.google.gson.JsonSyntaxException:应为 BEGIN_ARRAY,但实际为 STRING

2023-12-01

我在解析 json 数据时遇到此错误:

 Expected BEGIN_ARRAY but was STRING at line 1 column 1156

我找不到解决方案。我的 json 数据是:

{
    "project": [
        {
            "abbreviation": "abd",
            "customer": "customer1",
            "description": "description1",
            "icon": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC4UlEQVR42sXTXUhTYRgH8NNNXkTdmPlRpltqalgXZlB4hCC6C8VyYjErtbCoNLJiqQmOtqmYCkUXdhNEGSHYuVXCj81N58dcO+rOPt3c2dnOWTubeSPUv6PZx1U3XfTAj4f3gf/zXL0E8d+LoqgEw+RkvnnOWmi22H6Ytx4bHRtLSt2XSKhUqr8vkMKFYS5I8y5LhGemBYEx8xHPp3CICxpoevFcf3//LrVanaDRaBK0Wu0WnU632XdK8x3E1MxcSZR1Cez7ewgM1IEdqEWYasW6yCMajQqBQGDE5/N98Hq9lNvtppxOJ8UwDEXT9LuJiYmThMlkIuMxUVgXQ1KIw5doEGufOcRjMYiiiEgkAp7nwXEcWJaF3+/HysoKnC7XxtTUdA1hNBrJzUvx+Bpi8Thisbh0+XcwFAohyIUQYANS0A2P2wGXyw6GWdyYMo7VEXq9nuR5QSpeCnDgw0GEQ6x0MQA24MeqzwPvwhiWXzeD7q6CrecibL2XYO2s+DrzoGCEGNcbilmfk3e8fYSlXiWWn13F8vMaLD27gsU+JWydFbDcLcRsVTJmFEmYqdym2AuzcreDGNWbij02A79w/wTmlOmYqz74y6zypwzMVmdi9vIfqjNgrk0cJz5OmIoZI8Vb7kkLruVK8rblbpm/dhjz1yX1ObBsuvHD5tt8K3WQGB43FtPDr3hLYxEW6o/CWl8A280jWLydh+XGHDBNWXA+lMOpksHVnAlnSyYcrTLYW+SwtqS9kBZMkrahPoG+Uwh7w1G4m/LgV2Uh2CZDWJ0BQZOOSMd+RDpTIXSlgJdwnWlY7TjwjdGmtRFvBoeK9C9b7fMNx2J0U67oeHRI9D6WiavtcjH4JEvktBKdXJIusrpU0a9NFj2aFNHefiBsUGVcJk6fObunqbq0SF2aX6IpyyY7yrPIrvPZZHdFDtmjyCV7K/O3+lOFNFPIya4KGdlxQUa2l8lPlR9PS/nnz/gdnPcTQcpv7vgAAAAASUVORK5CYII=",
            "name": "projectname1",
            "plannedEndDate": "2012-05-25T00:00:00+01:00",
            "plannedStartDate": "2012-05-23T00:00:00+01:00",
            "projectStatus": {
                "name": "Opened"
            },
            "realEndDate": "2012-05-25T00:00:00+01:00",
            "realStartDate": "2012-05-23T00:00:00+01:00"
        }
    ]
}

我将图像转换为字节数组,如下所示:

public static byte[] convertToByteArray(String path) {  
        byte[] imageInByte = null;
        try{

            BufferedImage originalImage = 
                                      ImageIO.read(new File(path));

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write( originalImage, "png", baos );
            baos.flush();
            imageInByte = baos.toByteArray();

            baos.close();

            }catch(IOException e){
                System.out.println(e.getMessage());
            }
        return imageInByte;
    }

我将图标从字节数组转换为位图,如下所示:

Bitmap bm = BitmapFactory.decodeByteArray(project.getIcon(), 0,
        project.getIcon().length);
DisplayMetrics dm = new DisplayMetrics();

holder.imageProjet.setMinimumHeight(dm.heightPixels);
holder.imageProjet.setMinimumWidth(dm.widthPixels);
holder.imageProjet.setImageBitmap(bm);

我反序列化 JSON 响应的代码:

Gson gson = new GsonBuilder().setDateFormat(
                "yyyy-MM-dd'T'HH:mm:ssZ").create();

        final ProjectContainer container = gson.fromJson(resultat,
                ProjectContainer.class);
        final ListView lv = (ListView) findViewById(R.id.list);

        /**
         * Updating parsed JSON data into ListView
         * */
        adaptateur = new ProjectAdapter(ProjectActivity.this,
                R.layout.ligne_project, container);

这是我的 ProjectContainer 类:

  public class ProjectContainer {
        @SerializedName("project")
        List<Project> projects ;

        public List<Project> getProjects() {
            return projects;
        }

        public void setProjects(List<Project> projects) {
            this.projects = projects;
        }
    }

这是项目类:

public class Project implements Serializable {

    private static final long serialVersionUID = 1L;
    @SerializedName("projectStatus")
    private ProjectStatus projectStatus;
    @SerializedName("name")
    private String name;
    @SerializedName("description")
    private String description;
    @SerializedName("abbreviation")
    private String abbreviation;
    @SerializedName("customer")
    private String customer;
    @SerializedName("plannedStartDate")
    private Date plannedStartDate;
    @SerializedName("plannedEndDate")
    private Date plannedEndDate;
    @SerializedName("realStartDate")
    private Date realStartDate;
    @SerializedName("realEndDate")
    private Date realEndDate;
    @SerializedName("isDeleted")
    private Boolean isDeleted;
    @SerializedName("icon")
    private byte[] icon;


    public Project() {
    }

    public Project(String name, String description, String abbreviation,
            String customer, Date plannedStartDate, Date plannedEndDate,
            ProjectStatus projectStatus, Date realStartDate, Date realEndDate) {
        this.name = name;
        this.description = description;
        this.abbreviation = abbreviation;
        this.plannedStartDate = plannedStartDate;
        this.plannedEndDate = plannedEndDate;
        this.projectStatus = projectStatus;
        this.realStartDate = realStartDate;
        this.realEndDate = realEndDate;
        this.customer = customer;

    }

    public String toString() {
        return name;
    }

    public ProjectStatus getProjectStatus() {
        return this.projectStatus;
    }

    public void setProjectStatus(ProjectStatus projectStatus) {
        this.projectStatus = projectStatus;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return this.description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getAbbreviation() {
        return this.abbreviation;
    }

    public void setAbbreviation(String abbreviation) {
        this.abbreviation = abbreviation;
    }

    public Date getPlannedStartDate() {
        return this.plannedStartDate;
    }

    public void setPlannedStartDate(Date plannedStartDate) {
        this.plannedStartDate = plannedStartDate;
    }

    public Date getPlannedEndDate() {
        return this.plannedEndDate;
    }

    public void setPlannedEndDate(Date plannedEndDate) {
        this.plannedEndDate = plannedEndDate;
    }

    public Date getRealStartDate() {
        return this.realStartDate;
    }

    public void setRealStartDate(Date realStartDate) {
        this.realStartDate = realStartDate;
    }

    public Date getRealEndDate() {
        return this.realEndDate;
    }

    public void setRealEndDate(Date realEndDate) {
        this.realEndDate = realEndDate;
    }


    public byte[] getIcon() {
        return this.icon;
    }

    public void setIcon(byte[] icon) {
        this.icon = icon;
    }

    public String getCustomer() {
        return this.customer;
    }
    public void setCustomer(String customer) {
        this.customer= customer;
    }
}

如果您能帮我解决这个问题,我将不胜感激。提前致谢


当您尝试解析字段时抛出异常"icon",因为在您的 JSON 响应中有一个字符串,并且您尝试将其解析为byte[].

自从在你的班级里,icon是一个字节数组,当它尝试解析该字段时"icon"它说“期望一个数组",但是在 JSON 响应中"icon"不是一个数组(周围没有任何东西[ ]),所以它说“但是一个字符串"...


EDIT:也就是说,为了解决这个问题,我认为最简单的方法是改变类型icon for a String正确解析它,然后转换为byte[]在其他地方...例如,您可以在类中拥有一个方法,比方说public byte[] getIconAsByteArray() {...},进行转换。

否则,这可能是最elegant解决方案,你需要写一个定制解串器.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

com.google.gson.JsonSyntaxException:应为 BEGIN_ARRAY,但实际为 STRING 的相关文章

  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 如何使用InputConnectionWrapper?

    我有一个EditText 现在我想获取用户对此所做的所有更改EditText并在手动将它们插入之前使用它们EditText 我不希望用户直接更改中的文本EditText 这只能由我的代码完成 例如通过使用replace or setText
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 如何根据 gradle 风格设置变量

    我想传递一个变量test我为每种风格设置了不同的值作为 NDK 的定义 但出于某种原因 他总是忽略了最后味道的价值 这是 build gradle apply plugin com android library def test andr
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 如何计算 3D 坐标的线性索引,反之亦然?

    如果我有一个点 x y z 如何找到该点的线性索引 i 我的编号方案是 0 0 0 是 0 1 0 0 是 1 0 1 0 是最大 x 维度 另外 如果我有一个线性坐标 i 我如何找到 x y z 我似乎无法在谷歌上找到这个 所有结果都充满
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript

随机推荐

  • 哪个 Django 表单字段可以为我提供 的 HTML 输出?

    我有一个带有此输入的 html 表单
  • 开发模式下的GWT + JSTL——可能吗?

    我有一个 GWT 应用程序 由 roo 生成 我决定使用 Spring Security 来保护它 Roo 生成一个 login jspx 页面作为安全设置的一部分 并且此 jspx 使用一些基本的 JSTL 标记库 当在开发模式下运行时
  • 包含标头时防止出现多个 #define

    来自 python 我对正确的方法有点困惑 我正在尝试将该库包含在我的项目中 https github com nothings stb blob master stb image h 为此 我必须在导入文件之前 define STB IM
  • 如何在 JPA2 中强制使用 @ManyToOne 字段?

    我正在为应用程序设计持久性存储库 我是新来的休眠 JPA2我遇到了麻烦创造更复杂的关系在这种情况下外部强制键 一个例子 只是在记事本上写的 所以不完全是这样 我有一个名为 Person 的顶级类 它可以担任多个职位 另一个类 如果我像这样映
  • 低延迟地从 IP 摄像机获取帧

    我当前正在使用此命令从 RTSP 流获取帧并从标准输出读取帧 ffmpeg nostdin rtsp transport tcp i
  • 如何仅在图像悬停时显示 fancybox 标题

    我正在使用Fancybox插件对于图像库 我想仅当用户将鼠标悬停在图像上时显示图像标题 我不知道要修改代码的哪一部分才能完成此任务 我尝试通过添加来编辑 CSSa hover声明如下 fancybox title over wrap 我什至
  • 将日期对象转换为日历对象[重复]

    这个问题在这里已经有答案了 因此 我从传入对象中获取以下形式的日期属性 Tue May 24 05 05 16 EDT 2011 我正在编写一个简单的辅助方法将其转换为日历方法 我使用以下代码 public static Calendar
  • MySQL Inner Join 有限制吗?

    我有这个查询来收集有关单个订单的信息 它变得非常复杂 我没有任何数据可以测试 所以我问 如果有人在小型和大型数据集中有这方面的经验 那么您可以或应该在单个查询中进行多少个连接是否有限制 将大型查询分成较小的部分是否明智 或者这不会产生重大影
  • 在 Delphi 线程中使用 CoInitialize

    我在 Delphi 程序的线程内使用 TIdHttp 和 TXMLDocument 现在我想知道 这些类是否使用 COM 对象 因此我需要在此线程中调用 CoInitialize 和 CoUninitialize 如果是 我是否必须在执行方
  • Clearcase 问题 [已关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我负责我项目中的clearcase 我没有太多经验 我的问题是 现在我们在 cc 中的项目结构是一个包含 PROD PV ST DV 流的项目 如下所示 链接到屏幕截图 现在 如您所见 我
  • ECMAScript 6 和 ECMAScript Harmony 之间有什么区别?

    我有一段时间认为它们是同一件事 但我经常在博客或答案中看到措辞似乎暗示两者之间存在差异 即使 SO 有两个不同的标签 但它们的描述没有显示出任何明显的区别 我四处搜索了一下 这只增加了混乱 因为似乎我不是唯一一个不确定什么意思的人 这两个术
  • 异步和递归目录扫描,用于 Nodejs 和 Expressjs 中的文件列表

    In this 快递我正在尝试 递归地 获取路由文件中的所有 JSON 文件 data目录 其实我可以控制台日志您可以在其中看到的文件A Mark 但是一旦异步内容完成 我找不到将整组路径发送到视图的方法 一些帮助将非常感激 这是数据 da
  • 有没有办法使用正则表达式来获取第一个单词并替换引用的部分?

    我正在尝试更换相思船 只是复制内容时的占位符 第一个单词 即变量名 SCAFFOLDING new ItemBuilder Material valueOf ACACIA BOAT build SEAGRASS new ItemBuilde
  • 如何向 Winform C# 程序发送 2-3 个参数?

    如何向 Winform C 程序发送 2 3 个参数 例如 我会发送类似的东西MyProg exe 10 20 abc 在我的程序中我可以收到这些值 我不想显示 MyProg exe 它会在后台工作 提前致谢 打开你的Program cs这
  • freemarker 中的数字格式问题 - 在小数后进行舍入

    我正在使用 Freemarker 模板 我有一个十进制值 a 23 65 我只想检索以上值 a 23 6 lt Extract first number after decimal point gt 我使用过 number format e
  • 如何使用 PHP 获取 WAP 中的 MSISDN 号码?

    我开发了一个 WAP 应用程序 我想获取访问我的网站的用户的 MSISDN 我的运营商已将我的 WAP 应用程序列入白名单 我在几部三星手机上成功获得了 MSISDN 但在诺基亚 黑莓和 iPhone 设备上却没有获得相同的结果 请建议我获
  • 在 main() 之外调用函数[重复]

    这个问题在这里已经有答案了 我正在尝试这样做 include
  • cmake include_directories 顺序之后/之前

    我在源树中有一个文件 其名称为 time h 与系统 time h 完全相同 这是无法改变的 我在使用 cmake 时遇到了一个问题 当我使用 include library 选项时 它会被转换为 I 标志 这意味着我的自定义 time h
  • 是在 JavaScript 中更改每个元素的样式的唯一方法吗?

    我一直在研究一些不同的东西 我想使用 JavaScript 来全局调整样式 我想通过更改规定元素样式的 CSS 规则来做到这一点 类似于通过 Webkit 中的检查器执行此操作 但是在来到https developer mozilla or
  • com.google.gson.JsonSyntaxException:应为 BEGIN_ARRAY,但实际为 STRING

    我在解析 json 数据时遇到此错误 Expected BEGIN ARRAY but was STRING at line 1 column 1156 我找不到解决方案 我的 json 数据是 project abbreviation a