首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >预期的BEGIN_ARRAY,但在第1列是BEGIN_OBJECT

预期的BEGIN_ARRAY,但在第1列是BEGIN_OBJECT
EN

Stack Overflow用户
提问于 2014-03-29 12:09:20
回答 2查看 6.1K关注 0票数 0

嗨,在将Json解析为实际的Java之前,我需要找到Json中一个键的值(即type),但这样做会导致以下异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 

Json

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "type":1,
    "password":"ac@123",
    "role":"normaluser",
    "name":"Archana Chatterjee",
    "username":"a.chatterjee",
    "designation":"Teacher",
    "id":"T_02",
    "age":42
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Type listType = new TypeToken<ArrayList<Pair>>() {}.getType();
ArrayList<Pair> list = gson.fromJson(json, listType);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Pair {
    String property;
    Object value;
    // has getters and setters
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-01 04:55:55

在阅读了之后,我找到了一个更好的解决问题的方法。这里,我需要一个低级别的流解析器来获得JsonObject

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        String json3 = "{\"type\":1,\"password\":\"ac@123\",\"role\":\"normaluser\",\"name\":\"Archana Chatterjee\",\"username\":\"a.chatterjee\",\"designation\":\"Teacher\",\"id\":\"T_02\",\"age\":42}";
        JsonParser jParser = new JsonParser();
        JsonObject jObject = (JsonObject) jParser.parse(json3);

现在,JsonObject具有返回键值的能力。javadoc表示相同

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        JsonElement elem = jObject.get("type");

JsoElement's toString()返回键的值。(即此处类型的值)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        System.out.println(elem);

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1
票数 -1
EN

Stack Overflow用户

发布于 2014-03-29 15:16:51

首先,我建议你看一看Gson文档JSON规格,因为你看起来很迷茫.

使用Gson,解析JSON的最常用和最简单的方法是创建一个与JSON结构相匹配的Java类结构。

在本例中,JSON是一个对象(它被{ }包围),包含许多属性(例如,typepasswordrole等)。

因此,您需要创建一个具有这些属性的Java类(与名称匹配):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class User
  String type
  String password
  String role
  // ...

然后只需调用Gson,给它一些JSON字符串,并告诉它您希望将该JSON解析到哪个类中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
User someUser = gson.fromJson( yourJson, User.class );

编辑:如果您的JSON可能会更改,您就不能使用一个类来解析它,所以您有几个选项。可能最简单的方法是尝试将JSON解析为Map结构。

Map是一个对象(与您的JSON一样),它包含对Key=>Value (例如,'type'=>1)。因此,您可以尝试解析它,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Type mapType = new TypeToken< Map<String, String> >() {}.getType();
HashMap<String, String> map = gson.fromJson( yourJson, mapType );

注意:这种方法的问题是,由于Java是一种强类型语言,所以您的JSON必须有相同类型的对(例如)。在本例中,您的字段'type''age'不是字符串,而是整数,但我确信它可以自动将它们转换为字符串.

如果它不能,或者如果将'type''age'解析为整数非常重要,那么您唯一的选择就是编写一个自定义反序列化器.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22736272

复制
相关文章
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path 解决办法
返回数据解析错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN
张拭心 shixinzhang
2018/01/05
7.9K0
如何编写一个JSON解析器
编写一个JSON解析器实际上就是一个函数,它的输入是一个表示JSON的字符串,输出是结构化的对应到语言本身的数据结构。
bear_fish
2018/09/20
9190
如何编写一个JSON解析器
从Gson 的一个著名Bug说起
Gson是一个源自谷歌的JSON序列化/反序列化框架,出身名门,社区活跃,因此被广泛应用。
Antony
2021/07/14
2K0
从Gson 的一个著名Bug说起
实现一个JSON解析器,有那么难吗?
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
Java团长
2019/03/06
1.2K0
实现一个JSON解析器,有那么难吗?
搞一个自己JSON解析器
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
用户5224393
2019/08/13
6620
搞一个自己JSON解析器
自己手撸一个 JSON 解析器
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
好好学java
2019/10/22
1K0
自己手撸一个 JSON 解析器
撸一个 JSON 解析器
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
芋道源码
2019/05/13
1K0
实现一个JSON解析器,有那么难吗?
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
Bug开发工程师
2019/03/06
9490
实现一个JSON解析器,有那么难吗?
自己动手实现一个简单的JSON解析器
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。相对于另一种数据交换格式 XML,JSON 有着诸多优点。比如易读性更好,占用空间更少等。在 web 应用开发领域内,得益于 JavaScript 对 JSON 提供的良好支持,JSON 要比 XML 更受开发人员青睐。所以作为开发人员,如果有兴趣的话,还是应该深入了解一下 JSON 相关的知识。本着探究 JSON 原理的目的,我将会在这篇文章中详细向大家介绍一个简单的JSON解析器的解析流程和实现细节。由于 JSON 本身比较简单,解析起来也并不复杂。所以如果大家感兴趣的话,在看完本文后,不妨自己动手实现一个 JSON 解析器。好了,其他的话就不多说了,接下来让我们移步到重点章节吧。
田小波
2019/02/15
1.4K0
如何更好的使用Gson
今天想分享一些工作中遇到的关于gson的坑,这么说其实不太准确,因为不能算是gson的坑,更多的是因为旧代码产生了一些不规范的数据导致使用gson时遇到了一些问题。
Jackeyzhe
2020/06/18
1.1K0
手摸手实现一个编译器(上)
PEG.js 是一个简单的 JavaScript 解析器生成器,可以生成具有出色错误报告的快速解析器。您可以使用它来处理复杂的数据或计算机语言,并轻松构建转换器、解释器、编译器和其他工具。
码农小余
2022/06/16
7510
手摸手实现一个编译器(上)
如何更好的使用Gson
今天想分享一些工作中遇到的关于gson的坑,这么说其实不太准确,因为不能算是gson的坑,更多的是因为旧代码产生了一些不规范的数据导致使用gson时遇到了一些问题。
Jackeyzhe
2020/06/14
1.5K0
手写了一个简单的JSON解析器,网友直乎:牛!
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。相对于另一种数据交换格式 XML,JSON 有着诸多优点。比如易读性更好,占用空间更少等。在 web 应用开发领域内,得益于 JavaScript 对 JSON 提供的良好支持,JSON 要比 XML 更受开发人员青睐。所以作为开发人员,如果有兴趣的话,还是应该深入了解一下 JSON 相关的知识。
程序猿DD
2021/11/10
1.5K0
自己动手实现一个简单的JSON解析器
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。相对于另一种数据交换格式 XML,JSON 有着诸多优点。比如易读性更好,占用空间更少等。在 web 应用开发领域内,得益于 JavaScript 对 JSON 提供的良好支持,JSON 要比 XML 更受开发人员青睐。所以作为开发人员,如果有兴趣的话,还是应该深入了解一下 JSON 相关的知识。本着探究 JSON 原理的目的,我将会在这篇文章中详细向大家介绍一个简单的JSON解析器的解析流程和实现细节。由于 JSON 本身比较简单,解析起来也并不复杂。所以如果大家感兴趣的话,在看完本文后,不妨自己动手实现一个 JSON 解析器。好了,其他的话就不多说了,接下来让我们移步到重点章节吧。
田小波
2018/04/29
4K15
自己动手实现一个简单的JSON解析器
人生苦短,我用Gson
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 JSON 键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值,如下例子所示:
你呀不牛
2021/05/28
2.2K0
徒手撸一个JSON解析器
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。相对于另一种数据交换格式 XML,JSON 有着诸多优点。比如易读性更好,占用空间更少等。在 web 应用开发领域内,得益于 JavaScript 对 JSON 提供的良好支持,JSON 要比 XML 更受开发人员青睐。所以作为开发人员,如果有兴趣的话,还是应该深入了解一下 JSON 相关的知识。
南风
2019/12/18
7990
Android Study 之 彻底解决 Gson解析 异常 :JsonSyntaxException
开发过程中,App常用的接收参数的时候,几乎大部分都是以json格式为主,那么有关解析json的方式有很多,Android端相对来说使用Gson比较多,而在解析过程中,如果你遇到规范的后台,那你大可放心随便浪,But,如果遇到神后台,那么,呵呵了你就。真的想不到还会出现什么问题。。。
贺biubiu
2019/06/10
4.5K0
业绩超预期因子
学术界很早就发现,股票市场存在显著的盈余公告后的价格偏移现象(Post-Earnings Announcement Drift PEAD)。通俗解释来说,投资者对于公司的盈利有一个预期值,如果财报公布后,公司的实际盈利超出了投资者预期,公司的股价会上升,会有明显的超额收益。如果实际盈利低于投资者预期,公司股价会下降,会有明显的负向收益。本文基于这一现象构造盈利超预期因子,并对因子进行测试。后台回复“业绩超预期”获取代码和参考文献,限时免费。
量化小白
2020/03/18
2.9K0
业绩超预期因子
元宇宙的六个预期差
从去年四季度起,元宇宙站上了TMT主题的C位,国盛区块链研究院作为资本市场最早聚焦该赛道的团队,近期与资本市场及产业圈进行了大量沟通。当我们将这一数字世界的“理想国”呈现给大家时,投资者分歧众多,大部分问题集中在:1)你觉得元宇宙主题还能持续多久?2)AR、VR的普及尚需时日,所以元宇宙落地还要多久?3)当前元宇宙游戏都是方块,看起来很低龄,怎么破?4)元宇宙涉及区块链,监管怎么办?。。。
用户9329036
2022/01/18
6360
元宇宙的六个预期差
点击加载更多

相似问题

预期的BEGIN_ARRAY,但在第1列是BEGIN_OBJECT

24

kotlin改造预期的begin_array,但在第1行是begin_object

20

燃料,Kotlin,Gson,预期的BEGIN_ARRAY,但在第1行是BEGIN_OBJECT

13

预期的BEGIN_ARRAY但在第1列第2列是BEGIN_OBJECT路径$- Retrofit

14

错误:预期的BEGIN_ARRAY但在第1列第2列的是BEGIN_OBJECT路径$

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文